Javascript嵌套for循环不起作用

时间:2015-06-26 13:17:03

标签: javascript node.js loops for-loop

这很奇怪,我在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;...)那样重新初始化变量,只是重置了
  • 他在for语句中包含变量reset,而不是在每次迭代后包含
  • 他没有声明变量var a = 0, i = 0然后在每个for语句中重置它
  • 他使用常规增量
  • 他在代码段的开头声明了每个变量,而不是在执行中的不同时间声明它们

再次感谢!

6 个答案:

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

这是一个范围问题。变量tablea未在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