-3

我很困惑。有人可以向我解释为什么这会产生无限循环吗?

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 函数级变量范围有关,但据我的猜测。

4

1 回答 1

1

当您不使用var关键字声明变量时,该变量是全局的,因此loop2使用loop1相同的(全局)i变量。每次loop2调用时,i设置为 0,然后递增到stack.length,即 2。这意味着每次迭代都loop1将以 结束i=2,递增到 3,但永远不会达到constant4。

如果您将 for 循环更改为for (var i = 0; ...)for (i = 0; ...)那么这应该不再无限循环。

于 2012-12-22T23:16:35.510 回答