为什么这个范围像它一样?

时间:2017-04-17 04:10:00

标签: javascript scope hoisting

好。我知道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);        
}

0 个答案:

没有答案