由简单的for循环引起的javascript无限循环

时间:2012-05-29 12:17:54

标签: javascript for-loop infinite-loop

由于这一小段代码,我得到了一个无限循环。如果我在循环之前将var i声明为任何值(即var i = 0),它就会变得固定,我不知道为什么。熟悉javascript错综复杂的人可以向我解释一下这里发生了什么吗?

for (num = 1; num <= 2; num++) {
    for (i = 1; i < num; i++) {
      console.log("hi");
    }
}

3 个答案:

答案 0 :(得分:4)

由于i未被声明为本地var,因此您的代码是实际更改变量/对象window.i以及window.num

添加var个关键字可以解决问题:

for (var num = 1; num <= 2; num++) {
    for (var i = 1; i < num; i++) {
      console.log("hi");
    }
}

这不能回答为什么程序进入无限循环的问题。但您只知道挂起的代码试图改变可能在其他地方使用的window.iwindow.num

详细了解 javascript范围规则

答案 1 :(得分:1)

代码似乎没问题,请在jsFiddle here上查看它。

另一个注意事项:小心javascript中的变量。您应该始终使用var来声明它们;如果你忘了他们最终会成为全局的!

答案 2 :(得分:0)

它不应该是无限的,但可能会发生这种情况。

您正在访问i而未声明var意味着您将其用作全局变量而非本地变量。尝试仔细分析您的代码,找出任何扰乱循环的全局“i”或“num”。