返回会停止循环吗?

2022-08-30 00:54:38

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

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

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

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

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


答案 1

是,停止执行并退出函数。 always** 立即退出其函数,如果它位于 for 循环中,则不会进一步执行。returnreturn

它很容易自己验证:

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

console.log(returnMe());

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


答案 2

在大多数情况下(包括本例),将立即退出。但是,如果返回值位于具有伴随块的块中,则 always 将执行并可以“覆盖”中的 .returntryfinallyfinallyreturntry

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