怎么算到3?

mpe*_*pen 2 javascript

可能的重复:
循环内部的Javascript闭包 - 简单的实际示例
Javascript闭包在错误的时间"存储"值

for (var i = 1; i <= 3; ++i) {
    setTimeout(function() {
        alert(i);
    }, i * 1000);
}
Run Code Online (Sandbox Code Playgroud)

这警告"4"3次.我知道为什么,但我不会在这里破坏它......虽然我忘记了如何解决它.什么是解决这个问题的简洁方法?

dec*_*eze 5

for (var i = 1; i <= 3; ++i) {
    setTimeout((function (x) {
        return function () { alert(x); }
    })(i), i * 1000);
}
Run Code Online (Sandbox Code Playgroud)