continue;
停止循环并转移到 next 循环break;
停止循环并移至循环的 end 是否有某种start;
停止循环并转移到循环的开头?
我知道通过修改i
的值很容易实现所有这三个操作,但我总是试图寻找已经内置的函数。
答案 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
语句的初始化表达式,你可以轻松地将它放在for
内while
循环之前,它将全部重新运行...
答案 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;
}
}
}
}
你可以明显地改变条件以适合你的逻辑,因为上面是一个简单的例子。