提起如何解釋此行爲?JavaScript提起怪異行爲
for(var i = 0; i < 4; i++) {
setTimeout(function() {
alert("i is: " + i);
}, i * 200);
}
的這個輸出是4,4,4,4。
這被用作在文獻吊裝經常的危險例子。有意義的是,後面的輸出可能是4,因爲i變量被綁定到函數作用域,並且在所有調用之間共享,並且在它們執行的時候,我將4完成for循環。然而,初始調用指定了一個0 * 200或0的超時時間,因此我認爲這應該立即執行,而我仍然小於4.是什麼原因導致該函數的所有輸出爲4?
這並不是因爲它與吊裝無關。即使你通過'0'作爲延遲,瀏覽器的最小延遲大約是10ms。 – 2013-02-22 19:18:30
我認爲,我一直在網上閱讀的例子都是誤導性的。即http://thecomputersarewinning.com/post/a-dangerous-example-of-javascript-hoisting/ – 2013-02-22 19:21:51