Вопрос по javascript, loops, return – Возврат останавливает цикл?

109

Предположим, у меня есть такой цикл:

for (var i = 0; i < SomeArrayOfObject.length; i++) {

  if (SomeArray[i].SomeValue === SomeCondition) {

     var SomeVar = SomeArray[i].SomeProperty;
     return SomeVar;
  }
}

Быстрый вопрос:return остановить выполнение цикла само по себе?

Ваш Ответ

6   ответов
148

return останавливает выполнение и выходит из функции.return всегда завершает свою функцию немедленно, без дальнейшего выполнения, если она находится внутри цикла.

Это легко проверить для себя:

function returnMe() {
  for (var i=0; i<2; i++) {
    if (i === 1) return i;
  }
}

alert(returnMe());
// 1

Note: See этот другой ответ о частном случаеtry/catch/finally.

Альтернатива использованию forEach () или for () в массиве для & # x201C; потенциально & # x201D; раннее завершение цикла использует some ().
Может быть красная нитьreturnвсегда будет возвращаться из текущегоthis контекст.
@ о-о Вроде правда.return по-прежнему возвращается из текущей итерации обратного вызова функции в своей области видимости, но не ожидается, что она будет прервана из всего вызывающего методаforEach(), Так что он не возвращается изloop itself, но он возвращается из обратного вызова, который выполняет цикл. В примере кода из связанного вопроса, вывод1,2,4,5 пропуская3 из-за возврата.
& GT; return всегда завершает свою функцию немедленно, без дальнейшего выполнения, если он находится внутри цикла...unless it's a forEach loop
5

Да, разreturn оператор выполняется, вся функция завершается в тот же момент.

Просто представьте, что произойдет, если этого не произойдет, и продолжите цикл, и выполняя этоreturn заявление каждый раз? Это лишило бы смысла возвращать значение, когда вы об этом думаете.

49

Вmost случаи (включая этот),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
старое, но хорошее
1

Ответ - да, если вы напишете оператор return, элементы управления немедленно возвращаются к методу вызывающего. За исключением блока finally, который выполняется после оператора return.

И, наконец, вы также можете переопределить возвращенное вами значение, если вы вернетесь в блок finally. ССЫЛКА НА САЙТ:Попробуй поймай, наконец, вернись

Возврат определения оператора согласно:

Документы Java:

a return statement can be used to branch out of a control flow block and exit the method

Документация MSDN:

The return statement terminates the execution of a function and returns control to the calling function. Execution resumes in the calling function at the point immediately following the call.

Википедия:

A return statement causes execution to leave the current subroutine and resume at the point in the code immediately after where the subroutine was called, known as its return address. The return address is saved, usually on the process's call stack, as part of the operation of making the subroutine call. Return statements in many languages allow a function to specify a return value to be passed back to the code that called the function.

это выглядит хорошо сейчас?
Вам необходимо правильно связать источники, которые вы использовали, и в идеале также отформатировать кавычки.
Я ценю исправления грамматики, но ссылок по-прежнему нет, и вы по-прежнему не используете форматирование цитат.
4

return Оператор останавливает цикл, только если он внутри функции. В противном случае вы получите эту ошибку:

0

возвращение ; действительно выходит из функции, но если вы хотите вернуть большие суммы данных, вы можете сохранить их в массиве и затем вернуть их вместо попытки вернуть каждый фрагмент данных 1 на 1 в цикле.

Похожие вопросы