这很奇怪,我在javascript中遇到了简单的嵌套for循环问题。
我的代码是这样的:
var a = 0, b = 2048;
var i = 0, l = 2048;
for(; a < b; a++) {
for(; i < l; i++) {
console.log(a, b, i, l);
}
}
因此,虽然我希望得到类似(0..2047), 2048, (0..2047), 2048
的输出,但我有这样的输出:0, 2048, 0..2047, 2048
其中第一个变量:a
没有&#39}。简单地从0到2047迭代。
重述概念:当内循环正确迭代时,外循环仅在索引0处执行一次。
我确定这是一个简单而愚蠢的问题,但我无法发现它......
评论
感谢所有人发现这个问题,令人难以置信的是我无法看到这个问题。我接受了西蒙的回答,因为它对我来说似乎更干净,更优雅:
for(var i = 0;...)
那样重新初始化变量,只是重置了var a = 0, i = 0
然后在每个for语句中重置它再次感谢!
答案 0 :(得分:2)
您在i
循环之间没有将0
重新加载到a
。这里修复:
var a = 0, b = 2048;
var i = 0, l = 2048;
for(a = 0; a < b; a++) {
for(i = 0; i < l; i++) {
console.log(a, b, i, l);
}
}
答案 1 :(得分:2)
每次在内部迭代之前初始化i:
var a = 0, b = 2048;
var i, l = 2048;
for(; a < b; a++) {
for(i = 0; i < l; i++) {
console.log(a, b, i, l);
}
}
答案 2 :(得分:2)
发生这种情况的原因是因为你永远不会重置i,所以内循环只会在外循环的第一次迭代中发生。此后我将永远大于l。
试试这个:
var a = 0, b = 2048;
var i = 0, l = 2048;
for(; a < b; a++) {
for(; i < l; i++) {
console.log(a, b, i, l);
}
i = 0;
}
答案 3 :(得分:1)
循环如下:
表示a = 0;在我成为2048年的时候。 然后对于a = 1,i是2048,因此我不是&lt; l因而没有再次进入循环。
var a = 0, b = 2048;
for(; a < b; a++) {
var i = 0, l = 2048;
for(; i < l; i++) {
console.log(a, b, i, l);
}
}
我相信这就是你想要的。
答案 4 :(得分:1)
这是一个范围问题。变量以这种方式定义变量:table
和a
未在for循环范围内定义。
i
编辑: squint是绝对正确的,JavaScript不使用块作用域,我误认为是问题。虽然,您应该始终考虑定义在for循环声明中递增的变量,以消除混淆/歧义。
答案 5 :(得分:0)
尝试一个循环
var a = 0, b = 2048;
var i = 0, l = 2048;
for(; a <= b&&i<=l; a++,i++) {
console.log(a, b, i, l);
}
有两个循环,它永远不会被重置,所以只能迭代一次,因此结果
0, 2048, 0..2047, 2048