提升如何解释这种行为?
for(var i = 0; i < 4; i++) {
setTimeout(function() {
alert("i is: " + i);
}, i * 200);
}
其输出为 4、4、4、4。
这在文献中经常被用作一个危险的起重例子。后面的输出可能是 4 是有道理的,因为 i 变量绑定到函数范围,因此在所有调用之间共享,并且在它们执行时 i 将是 4 完成 for 循环。但是,初始调用指定了 0 * 200 或 0 的超时,因此我觉得这应该在 i 仍然小于 4 时立即执行。是什么导致该函数的所有输出都是 4?