我感到困惑。有人可以向我解释为什么会产生无限循环吗?
var constant = 4;
var stack = new Array();
stack.push(0);
stack.push(1);
loop1();
function loop1(){
for(i = 0; i < constant; i++){
loop2(i);
}
}
function loop2(num){
for(i = 0; i < stack.length; i++){
console.log(i);
}
}
小提琴:http://jsfiddle.net/elclanrs/tywV9
我怀疑它与Javascript函数级变量范围有关,但就我的猜测而言。
答案 0 :(得分:1)
如果您未使用var
关键字声明变量,则该变量是全局变量,因此loop2
和loop1
使用相同的(全局)i
变量。每次调用loop2
时,i
都会设置为0,然后会增加到stack.length
,即2。这意味着loop1
的每次迭代都将以{结尾{1}},增加到3,但永远不会达到i=2
,即4。
如果您将for循环更改为constant
而不是for (var i = 0; ...)
,那么这不应再无限循环。