47

我有一个 for 循环,我想像这样退出:

function MyFunction() {
  for (var i = 0; i < SomeCondition; i++) {
     if (i === SomeOtherCondition) {
        // Do some work here.
        return false;
     }
  }
  // Execute the following code after breaking out of the for loop above.
  SomeOtherFunction();
}

问题是// Do some work here.语句执行后,我想退出 for 循环,但仍想执行整个 for 循环下面的代码(下面的所有内容// Execute the following code after breaking out of the for loop above.)。

return false语句确实退出了 for 循环,但它也退出了整个函数。我该如何解决?

4

6 回答 6

91

您正在寻找break声明

于 2012-05-06T14:53:44.033 回答
12

使用 break 或 continue 语句

function MyFunction() { 
  for (var i = 0; i < SomeCondition; i++) { 

     if (i === SomeOtherCondition) { 

        // Do some work here 
        break;
     } 
  } 

  SomeOtherFunction(); 
  SomeOtherFunction2(); 
} 

或继续处理除条件之外的项目

function MyFunction() { 
  for (var i = 0; i < SomeCondition; i++) { 

     if (i != SomeOtherCondition) continue;

     // Do some work here 
  } 

  SomeOtherFunction(); 
  SomeOtherFunction2(); 
} 
于 2012-05-06T14:57:55.563 回答
7

有几个人提供break了解决方案,这确实是该问题的最佳答案。

但是,为了完整起见,我觉得我还应该补充一点,通过将条件的内容包装在闭包函数中,可以在保留return语句的同时回答问题:if()

function MyFunction() {

  for (var i = 0; i < SomeCondition; i++) {

     if (i === SomeOtherCondition) {
        function() {
           // Do some work here
           return false;
        }();
     }
  }

  SomeOtherFunction();
  SomeOtherFunction2();
}

正如我所说,break在这种情况下可能是一个更好的解决方案,因为它是问题的直接答案,并且闭包确实引入了一些额外的因素(例如更改 的值this、限制函数内部引入的变量的范围等)。但它值得作为解决方案提供,因为它是一种值得学习的技术,如果不一定要在这个特定场合使用,那么肯定会在未来使用。

于 2012-05-06T17:54:31.407 回答
4

Break - 打破整个循环。继续 - 跳过循环中的一个步骤。所以它跳过下面的代码继续;

于 2012-05-06T14:57:53.247 回答
1

将 i 变量设置为 somecondition 值是一个好方法吗?

for (var i=0; i<SomeCondition; i++) {

   if (data[i]===true) {
   //do stuff
   i=SomeCondition;
   }
}
于 2014-11-18T15:18:03.357 回答
1

好吧,也许这是一个老话题,但是在阅读了所有答案之后,我想知道为什么没有人建议使用 while 循环来代替?

我想在 JavaScript 中你可以打破一个 for 循环(你不能在许多其他语言中这样做,或者被认为是一种不好的做法),但我仍然会只在你想要迭代循环固定数量的情况下使用 for 循环次。

这将是我的建议:

function MyFunction() {

  var i = 0,
      breakLoop = false;

  while (i < SomeCondition && !breakLoop) {

     if (i === SomeOtherCondition) {
        breakLoop = true;
     }

     i++;

  }

  SomeOtherFunction();
  SomeOtherFunction2();

}
于 2015-09-10T10:59:36.210 回答