【问题标题】: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);
}