>我很困惑。有人可以向我解释为什么这会产生无限循环吗?
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函数级变量作用域有关,但这是我的猜测。
当您不使用 var
关键字声明变量时,该变量是全局变量,因此loop2
和loop1
使用相同的(全局(i
变量。每次调用 loop2
时,i
都设置为 0,然后递增到 stack.length
,即 2。这意味着 loop1
的每次迭代都将以 i=2
结束,该 递增到 3,但永远不会达到 constant
即 4。
如果将 for 循环更改为 for (var i = 0; ...)
而不是 for (i = 0; ...)
,则不应再无限循环。