Javascript 由于变量碰撞导致的for循环无限循环
谁能向我解释一下这是怎么造成无限循环的?我从一本javascript书的示例中得到了这一点 代码如下:Javascript 由于变量碰撞导致的for循环无限循环,javascript,for-loop,Javascript,For Loop,谁能向我解释一下这是怎么造成无限循环的?我从一本javascript书的示例中得到了这一点 代码如下: function foo() { function bar(a) { i = 3; // changing the `i` in the enclosing scope's for-loop console.log( a + i ); } for (var i=0; i<10; i++) { bar( i * 2 ); // oops, inifini
function foo() {
function bar(a) {
i = 3; // changing the `i` in the enclosing scope's for-loop
console.log( a + i );
}
for (var i=0; i<10; i++) {
bar( i * 2 ); // oops, inifinite loop ahead!
}
}
foo();
函数foo(){
功能条(a){
i=3;//更改封闭作用域for循环中的'i'
控制台日志(a+i);
}
for(var i=0;i问题是,您正在从bar
函数中的for循环更改i
i = 3;
这意味着在bar
之外,它无法达到i<10
的条件
因此,bar
的调用如下:
bar(0*2);
然后i=3;
然后console.log(0+3);
然后i++
bar(4*2);
然后i=3;
然后console.log(8+3);
然后i++
bar(4*2);
然后i=3;
然后console.log(8+3);
然后i++
以此类推……i
将保持小于10
你应该改变你的代码,以避免出现问题的根源。你改变了i
变量,这样你就永远不会达到最终条件iOW。非常感谢!当你这样解释的时候,我马上就明白了。我误解了这一点,因为我认为var i=0;iIf它是在它自己的s中处理调用i=3;
会导致未定义的错误,因为您以前从未介绍过i
。哦,对了。还有一个学习点。非常感谢!感谢您费心解释这么简单的问题!总是很乐意帮助!@BreakBB“调用i=3
;会导致未定义的错误”-更正,这将创建一个全局变量,除非您处于严格模式-在这种情况下,分配给未声明的变量将抛出一个RefenceError,而不是生成一个隐含的全局变量。