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

Vad*_*off 3 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

Kay*_*ayo 5

由于i未声明为local var,因此您的代码将有效更改变量/对象window.i以及window.num

添加var关键字应该可以解决此问题:

for (var num = 1; num <= 2; num++) {
    for (var i = 1; i < num; i++) {
      console.log("hi");
    }
}
Run Code Online (Sandbox Code Playgroud)

这没有回答为什么程序进入无限循环的问题。但是您只知道挂起的代码正在尝试更改window.iwindow.num并且可能在其他地方使用。

阅读有关javascript作用域规则的更多信息。