我有一个关于嵌套循环如何在JavaScript中工作的问题。
想象一下我有while()循环......并且内部是for()循环。每个都有自己独立的结束条件(见下面的原理图)。
我的问题是:while()循环是否会停止INSTANT其结束条件 - 即使其中的for()循环尚未完成?这是一个例子。
var i = 0;
while (i < somenumber){
for(var j=0; j < othernumber; j++){
somecode();
i++:
}
}
代码似乎正在运行,但我想确保我理解这些结构应该如何工作。目标是获得while循环(因此也是for循环)以阻止&#39; i&#39;即使j尚未达到&#39;其他数字&#39;已达到&#39; somenumber&#39;。
答案 0 :(得分:1)
我建议您测试代码并查看代码。 Here我测试了任意数字,似乎表明while循环不会在条件满足的瞬间终止。它让工作完成。这是一个解释:
最初,条件为真,因此它进入while循环。一旦进入while循环,它就不会检查条件是否为真,直到下一次迭代,这意味着即使条件为假,它也不会停止执行for循环。这是测试代码:
var i = 0;
while (i < 5){
for(var j=0; j < 10; j++){
console.log(j + ", iter= " + i);
i++;
}
}
这会产生:
0, iter= 0
1, iter= 1
2, iter= 2
3, iter= 3
4, iter= 4
5, iter= 5
6, iter= 6
7, iter= 7
8, iter= 8
9, iter= 9
从上面的输出中,我们看到for循环没有结束。它一直在继续,因为虽然while循环的条件是错误的,但它不会检查它是否为真,直到下一次迭代,允许for循环完成。
答案 1 :(得分:1)
var i = 0;
while (i < 10){
for(var j=0; j < 12; j++){
somecode(j);
i++;
}
console.log('i',i);
}
function somecode(j) {
console.log('in the for loop', j);
}
执行整个for
循环,然后评估console.log
循环中的最终while
。
答案 2 :(得分:1)
每个循环将检查当前迭代结束时的条件(当循环到达结束括号时)。在 for 循环中停止 while 循环的唯一方法是制作如下内容:
for(var j=0; j < othernumber; j++){
somecode();
i++;
if (!(i < somenumber)) break; //it exits the for loop
}
退出for循环并到达while循环的右括号时,它将检查while条件并退出循环
答案 3 :(得分:1)
您可以使用labels
和break
命令直接退出父循环:
var x = 0, y=0;
b1: {
while (x++ < 5){
b2: {
for(y=0; y < 3; y++){
if (y === 1){
x = 2;
break b1;
}
}
}
}
}
console.log(`x=${x} y=${y}`)
&#13;
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/break