提起如何解释此行为?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