由于这一小段代码,我得到了一个无限循环。如果我在循环之前将var i声明为任何值(即var i = 0),它就会变得固定,我不知道为什么。熟悉javascript错综复杂的人可以向我解释一下这里发生了什么吗?
for (num = 1; num <= 2; num++) {
for (i = 1; i < num; i++) {
console.log("hi");
}
}
答案 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.i
和window.num
。
详细了解 javascript范围规则。
答案 1 :(得分:1)
代码似乎没问题,请在jsFiddle here上查看它。
另一个注意事项:小心javascript中的变量。您应该始终使用var
来声明它们;如果你忘了他们最终会成为全局的!
答案 2 :(得分:0)
它不应该是无限的,但可能会发生这种情况。
您正在访问i而未声明var意味着您将其用作全局变量而非本地变量。尝试仔细分析您的代码,找出任何扰乱循环的全局“i”或“num”。