返回是否会停止循环?

时间:2012-07-30 01:39:49

标签: javascript loops return

假设我有一个这样的循环:

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

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

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

快速提问:return是否会停止执行循环?

7 个答案:

答案 0 :(得分:154)

是的,return停止执行并退出该功能。 return总是**立即退出其函数,如果它在for循环中则不再执行。

很容易为自己验证:

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

alert(returnMe());
// 1

**注意:请参阅this other answer有关try/catch/finallythis answer的特殊情况,了解forEach循环如何具有自己的函数范围,不会突破包含函数。

答案 1 :(得分:52)

大多数个案(包括此案例)中,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

答案 2 :(得分:6)

return语句仅在函数内部停止循环。否则,您将收到此错误:

Uncaught SyntaxError: Illegal return statement(…)

答案 3 :(得分:5)

是的,一旦执行了return语句,就会退出整个函数。

想象一下如果它没有并继续循环会发生什么,并且每次都执行return语句?它会使你想到它时返回一个值的意思无效。

答案 4 :(得分:1)

答案是肯定的,如果你编写return语句,控件会立即回到调用方法。 除了finally块之外,它在return语句之后执行。

最后还可以覆盖你返回的值,如果你返回finally块内部。 链接:Try-catch-finally-return clarification

按照以下方式返回声明定义:

Java Docs:

  

return语句可用于分支出控制流程块   并退出方法

MSDN文档:

  

return语句终止函数的执行和   将控制权返回给调用函数。执行恢复   在通话结束后立即调用功能。

百科:

  

return语句导致执行离开当前子例程   并在紧接着之后的代码中恢复   子程序被调用,称为返回地址。退货地址   保存,通常在进程的调用堆栈中,作为一部分   进行子程序调用的操作。许多人都有退货声明   语言允许函数指定要传回的返回值   到调用函数的代码。

答案 5 :(得分:0)

“return”会退出该函数但是如果要返回大量数据,可以将其存储在数组中然后返回它,而不是尝试在循环中逐个返回每个数据。

答案 6 :(得分:0)

此代码将在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
}