因变量冲突而产生的for循环无限循环

时间:2019-03-20 11:55:04

标签: 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, inifinite loop ahead!
  }
}
foo();

1 个答案:

答案 0 :(得分:1)

问题是,您正在i函数内部的for循环中更改bar

i = 3;

这意味着在bar之外无法达到条件i < 10

所以bar的调用就像:

  1. bar(0 * 2);然后i = 3;然后console.log(0 + 3);然后i++
  2. bar(4 * 2);然后i = 3;然后console.log(8 + 3);然后i++
  3. bar(4 * 2);然后i = 3;然后console.log(8 + 3);然后i++
  4. 依此类推... i将保持小于10

您应该更改代码以避免出现问题的根源i = 3;