嵌套JavaScript如何循环自然中断

时间:2016-08-29 22:51:13

标签: javascript loops

我有一个关于嵌套循环如何在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;。

4 个答案:

答案 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)

tested it for you

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)

您可以使用labelsbreak命令直接退出父循环:

&#13;
&#13;
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;
&#13;
&#13;

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/break