由于这段代码的存在,我陷入了一个无限循环中。如果在循环之前声明变量i并赋值(例如 var i = 0),问题会得到解决,但我不确定原因。熟悉JavaScript细节的人能否向我解释一下这里发生了什么?
for (num = 1; num <= 2; num++) {
for (i = 1; i < num; i++) {
console.log("hi");
}
}
由于这段代码的存在,我陷入了一个无限循环中。如果在循环之前声明变量i并赋值(例如 var i = 0),问题会得到解决,但我不确定原因。熟悉JavaScript细节的人能否向我解释一下这里发生了什么?
for (num = 1; num <= 2; num++) {
for (i = 1; i < num; i++) {
console.log("hi");
}
}
由于 i
没有被声明为本地变量,因此您的代码实际上会改变变量/对象 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 作用域规则 的内容。
i
和 num
的值,以查看在更改这些变量之前它们包含什么内容。我想知道为什么它卡住了。 - Kayo它不应该是无限的,但这里可能会发生这种情况。
如果您在未声明变量的情况下访问i,则表示您将其用作全局变量而不是本地变量。请仔细分析您的代码,查找任何混乱您循环的全局“i”或“num”。