有一个循环“重新开始”吗?

时间:2012-01-07 02:42:58

标签: javascript loops

  • continue;停止循环并转移到 next 循环
  • break;停止循环并移至循环的 end

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

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

6 个答案:

答案 0 :(得分:12)

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

正如您已经提到的,您只需修改循环中的循环条件变量即可。如果它是一个简单的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通常会在break语句退出包含的while循环之后退出。

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

答案 1 :(得分:10)

将循环变量的值重置为初始值,然后调用continue尽可能接近。

例如:

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

答案 2 :(得分: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
}

答案 3 :(得分:3)

没有。 (只是为了排除“我还没有听说过它” - 在https://developer.mozilla.org/en/JavaScript/Reference/Statements没有提及。)

答案 4 :(得分:2)

continue只需跳过循环体的其余部分即可。 break通过跳过循环体的其余部分然后结束循环来工作。一个start函数必须以某种方式“回退”程序的状态 - 但不是程序的所有状态,因为大概你不想失去你所做的 - 也就是它到了什么时候循环开始了,这不是我见过的任何编程语言都提供的。

答案 5 :(得分:1)

你可以在一个递归调用自身的函数中使用循环:

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

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