Javascript 由于变量碰撞导致的for循环无限循环

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

谁能向我解释一下这是怎么造成无限循环的?我从一本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, 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,而不是生成一个隐含的全局变量。