假设我有一个这样的循环:
for (var i = 0; i < SomeArrayOfObject.length; i++) {
  if (SomeArray[i].SomeValue === SomeCondition) {
     var SomeVar = SomeArray[i].SomeProperty;
     return SomeVar;
  }
}
快速提问:是否会return停止循环本身的执行?
假设我有一个这样的循环:
for (var i = 0; i < SomeArrayOfObject.length; i++) {
  if (SomeArray[i].SomeValue === SomeCondition) {
     var SomeVar = SomeArray[i].SomeProperty;
     return SomeVar;
  }
}
快速提问:是否会return停止循环本身的执行?
在大多数情况下(包括这一种),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
该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
}
是的,一旦return语句被执行,整个函数就会在那个时候退出。
试想一下,如果不这样做并继续循环并return每次都执行该语句会发生什么?当您考虑它时,它会使返回值的含义无效。