2012-01-07 41 views
9
  • continue;停止循环,并移动到下一个循环
  • break;停止循环,并移动到循环

年底是不是又有一些种类start;停止循环,并移动到开始的循环?有没有一个循环“开始”?

我知道通过修改i的值很容易实现所有这三个操作,但我总是试图寻找已经构建的它的功能。

+0

您可以通过只搁柜台就像在for循环您可以重置指数为0,它会重新启动 – user889030 2017-04-07 09:36:37

回答

10

没有 - 没有关键字或其他方式来自动执行。

正如您刚才提到的,您可以在循环中修改循环条件变量。如果它是一个简单的i计数器,很容易,但当然你可能有更多的初始化工作,而不仅仅是一个简单的计数器。

或者你也可以做类似如下:

restartLoop: 
while (true) { 
    for (var i=0, j=100000, x="test"; i < 1000; i++, j--, x+= ".") { 
     if (/*some condition, want to restart the loop*/) 
      continue restartLoop; 
    } 
    break; 
} 

continue restartLoop将跳回了继续与while循环,然后立即从一开始就包括所有的启动for循环的下一次迭代初始化代码。如果for正常退出while循环后退出break语句。

我真的不建议在一般意义上这样做,但如果你的循环初始化过程是真的复杂,它可能是值得的,因为那么你就不需要再重复这一切的循环中。如果您需要进行更多的初始化,而不是很适合for语句的初始化表达式,那么您可以轻松地将它放在while内的for循环之前,它将全部重新运行...

+1

我不知道JS可以做到这一点。棒极了 – ajax333221 2012-01-07 02:58:12

+0

是的,'continue'和'break'都可以和[label](https://developer.mozilla.org/en/JavaScript/Reference/Statements/label)一起使用,这样你就可以继续使用'从内部循环内部打破外部循环(通过尽可能多的嵌套级别)。当然,在我的回答中,我已经滥用了这一点,因为除了允许重新启动内部循环外,我的外部循环没有任何用处,但无论如何还有更严重的应用程序,因为我相信您可以想象。 – nnnnnn 2012-01-07 03:07:29

+0

是否可以标记一个循环的开始,并使用break跳转到它? (是这种情况,我想我发现了一个有趣的方式来实现我想要的) – ajax333221 2012-01-07 03:12:59

1

continue作品。 break的工作原理是跳过循环体的其余部分,然后结束循环。函数将不得不以某种方式“倒转”程序的状态 - 但不是程序的所有状态,因为大概你不想失去你所做的 - 无论是循环开始时的位置,这不是我见过的任何编程语言所提供的。

+1

重启循环,我怀疑的数据将会丢失,如果循环有些循环后从0开始,你分配-1的值,它将再次开始循环。我经常使用它。 – ajax333221 2012-01-07 02:49:21

+0

是的 - 但要自动执行此操作,语言需要知道循环变量是哪一个。 – 2012-01-07 15:08:26

7

将您的循环变量的值重置为初始值,然后调用continue就可以了。

例如:

for(var i=0; i<20; i++) { 
    if(somecondition) { 
    i=-1; continue; 
    } 
} 
+4

我相信'i = -1'更适合(我可能是错的),它取决于'continue'是否阻止'i ++'(我不知道) – ajax333221 2012-01-07 02:55:21

+0

@ ajax333221是正确的。在重新评估条件之前,'continue'肯定跳转到更新表达式。 – nnnnnn 2012-01-07 02:58:10

+0

没有必要测试,[doco](https://developer.mozilla.org/en/JavaScript/Reference/Statements/continue#Description)如此明确地表示... – nnnnnn 2012-01-07 03:10:23

1

你可以有循环在递归调用自身的函数:

function loopIt(numTimes) { 
      if (numTimes < 3) { 
       for (x = 0; x < 20; x++) { 
        if (x == 5) { 
         loopIt(numTimes+1); 
         break; 
        } 
       } 
      }  
     } 

可以明显改变的条件,以适应你的逻辑,上面是一个简单的例子。

4

如果你想避免跳转或goto语句的等价物,我们许多人已经被训练避免,你可以使用循环的本地函数和返回值的测试来查看是否应该调用它再次:

function doItAll() { 
    // put state variables other than the actual loop control here 

    function doTheLoop() { 
     for(var i=0; i<20; i++) { 
      if (somecondition) { 
       return(true); // run the loop again 
      } 
     } 
     return(false); // done running the loop 
    } 
    while (doTheLoop()) {} 
    // do some things after the loop 
} 
+0

非常好的建议 – ajax333221 2012-01-07 06:09:26

+0

这是一个很好的解决方案。然而,你可以通过将同时和同时放入同一个功能来美化和增强它。 – Bitterblue 2016-06-10 10:05:38

相关问题