迭代堆栈时javascript中的变量范围

时间:2012-12-22 22:34:58

标签: javascript scope

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

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

1 个答案:

答案 0 :(得分:1)

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

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