有一个循环"重新开始"吗?

aja*_*221 15 javascript loops

  • continue;停止循环并移动到下一个循环
  • break;停止循环并移动到循环结束

是不是有某种start;停止循环并移动到循环的开头

我知道通过修改值来轻松实现所有这三个操作i,但我总是试图寻找已经内置的函数.

nnn*_*nnn 14

不 - 没有关键字或其他方式自动执行此操作.

正如您已经提到的,您只需修改循环中的循环条件变量即可.如果它是一个简单的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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我不知道JS可以做到这一点。太棒了 (2认同)

Nie*_*sol 13

将循环变量的值重置为初始值然后调用continue就像你得到的那样接近.

例如:

for(var i=0; i<20; i++) {
  if(somecondition) {
    i=-1; continue;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我相信`i = -1`更合适(我可能是错的),这取决于`continue`是否会阻止`i ++`(我不知道) (5认同)
  • @jason 因为`i++` 会将它带回来。`-1` 表示 `i++` 会按预期将你重置为 `0`。 (2认同)

jfr*_*d00 6

如果您想避免跳转或我们许多人都经过培训避免的等效 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
}
Run Code Online (Sandbox Code Playgroud)