return 是否停止循环?

IT技术 javascript loops return
2021-01-26 01:50:27

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

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

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

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

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

6个回答

是的,return停止执行并退出函数。returnalways** 立即退出它的函数,如果它在 for 循环内则不再执行。

自己很容易验证:

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

console.log(returnMe());

** 注意:请参阅有关特殊情况的其他答案try/catch/finally 以及有关 forEach 循环如何拥有自己的函数范围的答案不会脱离包含函数。

我知道这对某些人来说是微不足道的,但这是很好的知识,因为您不再需要break然后return
2021-03-11 01:50:27
在数组上使用 forEach() 或 for() 以“可能”提前终止循环的替代方法是使用 some()。
2021-03-17 01:50:27
@oo 确实如此。return仍然从函数回调的当前迭代返回,在其自己的范围内,但预计不会中断整个调用方法forEach()所以它不是从循环本身返回,而是从循环执行的回调中返回。在链接问题的代码示例中,由于返回,输出1,2,4,5跳过了3
2021-03-23 01:50:27
也许红线return总是从当前this上下文返回
2021-03-27 01:50:27
> return 总是立即退出它的函数,如果它在循环内则不再执行......除非它是一个 forEach 循环
2021-04-10 01:50:27

大多数情况下(包括这一种),return会立即退出。但是,如果返回的是一个try块加上一个finally块中,finally始终执行并能“覆盖”了returntry

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 将始终执行,在这种情况下使用 try catch
2021-04-04 01:50:27

return语句仅在循环位于函数内部时才停止循环(即它同时终止循环和函数)。否则,您将收到此错误:

Uncaught SyntaxError: Illegal return statement(…)

要终止循环,您应该使用break.

此代码将在循环中的第一次迭代后退出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
}
谢谢,这对我有很大帮助,我正在使用 node 并且返回破坏了我的 for,for each 和 for...of,continue 像我预期的那样工作
2021-04-03 01:50:27

是的,一旦return语句被执行,整个函数就会在那个时候退出。

试想一下,如果不这样做并继续循环并return每次都执行该语句会发生什么当您考虑它时,它会使返回值的含义无效。