好。我知道Javascript使用函数作用域与块作用域,但我无法弄清楚为什么这个行为的例子会像它一样工作。
var txt = ["a","b","c"];
for (var i = 0; i < 3; ++i ) {
var msg = txt[i];
setTimeout(function() { console.log(msg); }, i*1000);
}
//outputs c, c, c
在我看来,如果i
被“提升”到此代码块的顶部,那么i
将等于0,然后是1000,那么for循环将会中断,因为1000&gt;那么为什么这个循环的行为方式呢?
msg = txt[i]
有关,因为代码的工作原理似乎应该是:
var txt = ["a","b","c"];
for (var i = 0; i < 3; ++i ) {
let msg = txt[i];
setTimeout(function() { console.log(msg); }, i*1000);
}