有人可以向我解释这是如何造成无限循环的吗?我是从一个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();
答案 0 :(得分:1)
问题是,您正在i
函数内部的for循环中更改bar
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 = 3;
。