由于这一小段代码,我得到了一个无限循环。如果我在循环之前将 var i 声明为任何值(即 var i = 0),它就会变得固定,我不知道为什么。熟悉javascript错综复杂的人可以向我解释这里发生了什么吗?
for (num = 1; num <= 2; num++) {
for (i = 1; i < num; i++) {
console.log("hi");
}
}
由于这一小段代码,我得到了一个无限循环。如果我在循环之前将 var i 声明为任何值(即 var i = 0),它就会变得固定,我不知道为什么。熟悉javascript错综复杂的人可以向我解释这里发生了什么吗?
for (num = 1; num <= 2; num++) {
for (i = 1; i < num; i++) {
console.log("hi");
}
}
由于i
未声明为 local var
,因此您的代码实际上是在更改变量/对象window.i
以及window.num
Adding var
keywords should fix the problem:
for (var num = 1; num <= 2; num++) {
for (var i = 1; i < num; i++) {
console.log("hi");
}
}
This doesn't answer the question why the program goes into an infinite loop. But you only know that the hanging code was trying to alter window.i
and window.num
which might be used elsewhere.
Read more about javascript scoping rules.
代码似乎很好,请在此处查看 jsFiddle 的实际操作。
另一个注意事项:小心 javascript 中的变量。您应该始终使用var
来声明它们;如果你忘记了他们最终会成为全球性的!
它不应该是无限的,但这是可能发生的情况。
您在没有声明 var 的情况下访问 i 意味着您将其用作全局变量而不是本地变量。试着仔细分析你的代码,找出任何在你的循环中弄乱的全局“i”或“num”。