Возвращает ли возврат цикла?
Предположим, что у меня такой цикл:
for (var i = 0; i < SomeArrayOfObject.length; i++) {
if (SomeArray[i].SomeValue === SomeCondition) {
var SomeVar = SomeArray[i].SomeProperty;
return SomeVar;
}
}
Быстрый вопрос: останавливает ли return
выполнение цикла внутри себя?
Ответы
Ответ 1
Да, return
останавливает выполнение и выходит из функции. return
всегда ** немедленно выходит из своей функции, без дальнейшего выполнения, если она внутри цикла for.
Это легко проверить для себя:
function returnMe() {
for (var i=0; i<2; i++) {
if (i === 1) return i;
}
}
alert(returnMe());
// 1
** Примечания: см. Этот другой ответ о специальном случае try/catch/finally
и этот ответ о том, что циклы forEach имеют свою собственную область действия функции, не выйдет из содержащей функции.
Ответ 2
В большинстве случаях (включая этот), 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
Ответ 3
Оператор return
останавливает цикл, только если он внутри функции. В противном случае вы получите эту ошибку:
Uncaught SyntaxError: Illegal return statement(…)
Ответ 4
Да, как только оператор return
выполняется, вся функция завершается именно в этой точке.
Представьте себе, что произойдет, если это не произойдет, и продолжите цикл, и выполнение этого оператора return
каждый раз? Это означало бы недействительность этого значения возврата ценности, когда вы думаете об этом.
Ответ 5
Ответ - да, если вы пишете оператор return, элементы управления возвращаются к методу вызывающего абонента.
За исключением блока finally, который запускается после инструкции return.
и, наконец, может также переопределить возвращаемое вами значение, если вы вернетесь в блок finally.
LINK: Пояснение о попытке окончательного возврата
Определение отчета о возврате в соответствии с:
Java Docs:
оператор возврата может использоваться для ветки от блока потока управления и выйти из метода
Документация MSDN:
Оператор return завершает выполнение функции и возвращает управление вызывающей функции. Выполнение возобновляется в вызывающую функцию в точке сразу после вызова.
Википедия:
Оператор return заставляет выполнение оставить текущую подпрограмму и возобновить в точке кода сразу после была вызвана подпрограмма, называемая ее адресом возврата. Обратный адрес сохраняется, как правило, в стеке вызовов процесса, как часть выполнение вызова подпрограммы. Операторы возврата во многих языки позволяют функции указывать возвращаемое значение, которое будет передано обратно к коду, который вызвал функцию.
Ответ 6
"return" завершает работу, но если вы хотите вернуть большие суммы данных, вы можете сохранить его в массиве и затем вернуть его вместо того, чтобы пытаться возвращать каждую часть данных 1 на 1 в цикле.
Ответ 7
Этот код выйдет из цикла после первой итерации цикла 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
}
Ответ 8
как насчет return
происходит в цикле map
или цикла forEach
? Я занимаюсь практикой алгоритма FreecodeCamp, похоже, что нет, поэтому я должен использовать метод цикла for. здесь ссылка https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-algorithm-scripting/finders-keepers
function findElement(arr, func) {
let num = 0;
// for(let i = 0; i < arr.length; i ++){
// num = arr[i];
// console.log(num)
// if(func(num)){
// console.log(num)
// return num;
// }
// }
arr.map(el => {
// console.log(func(num));
num = el;
if(func(num)){
// console.log(num);
return num;
}
})
return undefined;
}
// console.log(num);
findElement([1, 2, 3, 4, 6], num => num % 2 === 0);