【问题标题】:why global variable executed only one time in nested loop?为什么全局变量在嵌套循环中只执行一次?
【发布时间】:2019-04-15 16:47:10
【问题描述】:

为什么全局变量在嵌套的while循环(内部)中只执行一次?

//not working as expected;
var i = 1;
var j = 1;
while(i<=3){
    console.log(i);
    i++;
    while(j<=3){
        console.log(j);
        j++;
    }
}

//working as expected;
var i = 1;
while(i<=3){
    console.log(i);
    i++;

    var j = 1;
    while(j<=3){
        console.log(j);
        j++;
    }
}
当我编写上面的代码时(//没有按预期工作),内部while循环只执行了1st 3次,然后它回到外部while循环的顶部并执行它并且不回来到内部的while循环。但是,当我在 while 循环(内部和外部)之前声明变量并初始化它时,它执行得很好。为什么?

【问题讨论】:

  • 因为在第一部分 J 是全局的
  • 你应该首先阅读 JS 范围。全局变量可以在整个 JS 中更改和更新,并且无论最后一次更改,值都会保持不变。

标签: javascript loops nested


【解决方案1】:

那是因为j 没有被重新分配,一旦它变成 > 3 内循环就永远不会执行。

//not working as expected;
var i = 1;
var j = 1;
while(i<=3){
    console.log(i);
    i++;
    while(j<=3){
        console.log(j);
        j++;
    }
}

在这段代码中,在外循环的第一次迭代期间,j 从1 to 3 递增到i = 1。当i = 2 时,j 已经是4 并且它没有被重新分配,所以条件j &lt;= 3 为假并且不执行内部循环。

【讨论】:

    【解决方案2】:

    TLDR:如果 j 是全局的,则不会在每次迭代时将 j 重新分配回 1。

    当 j 变量是全局变量时,它不会在每个循环中重置回 1。

    outer loop output: i = 1
    inner loop output: j = 1
    inner loop output: j = 2
    inner loop output: j = 3
    outer loop output: i = 2
    outer loop output: i = 3
    

    当 j 变量在第一个 while 循环中时,它会在每次迭代时重置以输出如下...

    outer loop output: i = 1
    inner loop output: j = 1
    inner loop output: j = 2
    inner loop output: j = 3
    
    outer loop output: i = 2
    inner loop output: j = 1
    inner loop output: j = 2
    inner loop output: j = 3
    
    outer loop output: i = 3
    inner loop output: j = 1
    inner loop output: j = 2
    inner loop output: j = 3
    

    【讨论】:

      【解决方案3】:

      因为您没有将值更改回 1 试试这个:

      var i = 1;
      var j = 1;
      while(i<=3){
       console.log(i);
       i++;
       while(j<=3){
          console.log(j);
          j++;
       }
       j = 1;
      }
      

      【讨论】:

        猜你喜欢
        • 2017-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-02
        • 2011-06-16
        • 2013-11-06
        • 1970-01-01
        • 2023-01-30
        相关资源
        最近更新 更多