简单for循环导致的javascript无限循环

简单for循环导致的javascript无限循环,javascript,for-loop,infinite-loop,Javascript,For Loop,Infinite Loop,由于这一小块代码,我得到了一个无限循环。如果我在循环之前将VARI声明为任何值(即VARI=0),那么它将变为固定值,我不知道为什么。熟悉javascript的复杂性的人能向我解释一下这里发生了什么吗 for (num = 1; num <= 2; num++) { for (i = 1; i < num; i++) { console.log("hi"); } } for(num=1;num代码似乎很好,请在jsFiddle上查看它的实际操作 另一个注

由于这一小块代码,我得到了一个无限循环。如果我在循环之前将VARI声明为任何值(即VARI=0),那么它将变为固定值,我不知道为什么。熟悉javascript的复杂性的人能向我解释一下这里发生了什么吗

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

for(num=1;num代码似乎很好,请在jsFiddle上查看它的实际操作


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

它不应该是无限的,但下面是可能发生的情况


您在访问i时没有声明var,这意味着您将其用作全局变量而不是局部变量。请仔细分析您的代码,找出任何在循环中混乱的全局“i”或“num”。

由于
i
未声明为局部
var
,因此您的代码实际上是在改变变量/对象
窗口.ie> 以及
window.num

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

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

for(var num=1;num此处无无限循环。打印“hi”一次(Chrome 19.0.1084.52 m)对我来说似乎运行良好。无无限循环!!!您在此处发布之前简化了示例吗?给出的代码(无上下文)运行正常。可能在其他地方声明了一个
i
,并在循环的实际主体中进行了修改?我已经找出了问题所在,它不是for循环本身中的无限循环,而是包含它的函数的无限调用。这是由于我的函数在同样使用var的for循环中被调用我和我函数中的for循环不断修改该值,这样调用我函数的for循环就永远不会退出。实际上,了解哪些全局变量被代码覆盖是很有趣的。如果可能,在进入外部for循环之前使用firebug设置断点。然后,使用监视窗口查看var的值我想知道为什么它会挂起。顺便说一句,它是进入无限循环还是抛出并出错并停止执行。查看控制台错误或只是逐步检查代码。我已经知道出了什么问题,它不是for-it循环中的无限循环self,但包含它的函数的无限调用。这是因为我的函数在一个同样使用var i的for循环中被调用,而我的函数中的for循环不断修改该值,因此调用我的函数的for循环永远不会退出。它将是无限循环,值如下所示:outer:num=0-->inner:i=0,num=1-->i=1,num=2-->外部:num=0-->内部:i=2,num=1-->i=1,num=2-->内部:i=2,num=2-->i=1,num=2-->外部:num=0-->内部:i=2,num=1-->i=1,num=2-->外部:num=0-->内部:i=3,num=1-->i=1,num=2-->外部:num=0