【问题标题】:Nested loops var declaration嵌套循环 var 声明
【发布时间】:2020-02-28 15:44:19
【问题描述】:

我想打印这个

1 2 3 4 5 
2 3 4 5 6 
3 4 5 6 7 
4 5 6 7 8 
5 6 7 8 9 

经过多次猜测,代码看起来像这样

var a=5;
for (var i = 1; i <= a; i++) {  
     var result="";
 for (var j = 1; j <= a; j++) {
    result +=(i+j - 1)+ " ";
   }
   console.log(result);
  }

但我仍然不太明白为什么如果 var 结果声明位于其他地方(例如循环之外),结果会完全不同。

【问题讨论】:

    标签: javascript loops scope var


    【解决方案1】:

    不是为var 提升的声明,而是每一行的第一个值。

    var a = 5,
        result;
    
    for (var i = 1; i <= a; i++) {
        result = "";
        for (var j = 1; j <= a; j++) {
            result += (i + j - 1) + " ";
        }
        console.log(result);
    }

    【讨论】:

      【解决方案2】:

      您可以将result 的声明从循环中取出,如下所示:

      var a = 5, result;
      for (...
      ...
      

      但是您必须在每次外部循环迭代中清除它,否则每次迭代都会打印出越来越多的重复模式行。

      最终代码是:

      var a = 5, result;
      
      for (var i = 1; i <= a; i++) {
          result = ""; //Clearing happens here.
          for (var j = 1; j <= a; j++) {
              result += (i + j - 1) + " ";
          }
          console.log(result);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 2015-06-02
        • 2014-08-07
        相关资源
        最近更新 更多