Ответы:
Да, return
останавливает выполнение и выходит из функции. return
всегда ** немедленно выходит из своей функции, без дальнейшего выполнения, если она находится внутри цикла for.
Это легко проверить для себя:
function returnMe() {
for (var i=0; i<2; i++) {
if (i === 1) return i;
}
}
alert(returnMe());
// 1
** Примечания: см. Этот другой ответ о специальном случае try/catch/finally
и этот ответ о том, что циклы forEach имеют свою собственную область действия функции, не выйдут из содержащей функции.
return
по-прежнему возвращается из текущей итерации обратного вызова функции в своей области видимости, но не ожидается, что она будет прерываться из всего вызывающего метода forEach()
. Таким образом, он не возвращается из самого цикла , но он возвращается из обратного вызова, который выполняет цикл. В примере кода из связанного вопроса выходные данные 1,2,4,5
пропускаются 3
из-за возврата.
return
всегда будет возвращаться из текущего this
контекста.
break
и тогда return
.
В большинстве случаев (в том числе этот), return
выход немедленно. Однако, если возврат находится в try
блоке с сопровождающим finally
блоком, finally
всегда выполняется и может «переопределить» return
в try
.
function foo() {
try {
for (var i = 0; i < 10; i++) {
if (i % 3 == 0) {
return i; // This executes once
}
}
} finally {
return 42; // But this still executes
}
}
console.log(foo()); // Prints 42
return
Оператор останавливает цикл , только если он находится внутри функции. В противном случае вы получите эту ошибку:
Uncaught SyntaxError: Illegal return statement(…)
Этот код выйдет из цикла после первой итерации в for of
цикле:
const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
if (iterator.name == 2) {
return;
}
console.log(iterator.name);// 1
}
код ниже перейдет к условию и продолжит for of
цикл:
const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
if (iterator.name == 2) {
continue;
}
console.log(iterator.name); // 1 , 3
}
Да, после выполнения return
оператора вся функция завершается в этот же момент.
Только представьте, что произойдет, если этого не произойдет, и вы продолжите цикл и выполняете это return
утверждение каждый раз? Это бы лишило законной силы возвращать значение, когда вы об этом думаете.
Ответ - да, если вы напишете оператор return, элементы управления немедленно возвращаются к методу вызывающего. За исключением блока finally, который выполняется после оператора return.
И, наконец, может также переопределить возвращенное вами значение, если вы вернетесь внутрь блока finally. ССЫЛКА: Попробуй-пойми-наконец-то вернись
Вернуть определение оператора согласно:
Документы Java:
оператор return может использоваться для перехода из блока потока управления и выхода из метода
Документация MSDN:
Оператор return завершает выполнение функции и возвращает управление вызывающей функции. Выполнение возобновляется в вызывающей функции в точке, следующей за вызовом.
Википедия:
Оператор return приводит к тому, что выполнение покидает текущую подпрограмму и возобновляет работу в той точке кода сразу после того, где была вызвана подпрограмма, известная как ее адрес возврата. Адрес возврата сохраняется, как правило, в стеке вызовов процесса, как часть операции выполнения вызова подпрограммы. Операторы возврата во многих языках позволяют функции указывать возвращаемое значение для возврата в код, вызвавший функцию.
«return» действительно завершает функцию, но если вы хотите вернуть большие суммы данных, вы можете сохранить их в массиве, а затем вернуть вместо того, чтобы пытаться вернуть каждый фрагмент данных 1 на 1 в цикле.