遍历堆栈时 JavaScript 中的变量范围



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

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 关键字声明变量时,该变量是全局变量,因此loop2loop1使用相同的(全局(i变量。每次调用 loop2 时,i 都设置为 0,然后递增到 stack.length ,即 2。这意味着 loop1 的每次迭代都将以 i=2 结束,该 递增到 3,但永远不会达到 constant即 4。

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

最新更新