在JavaScript中将Unchangeable变量传递给setTimeout

时间:2014-02-13 20:16:07

标签: javascript variables timeout global-variables

首先:我没有使用全局变量。我只是在这个例子中使用它们来简化操作。我实际上将它们附加到另一个对象而不是窗口。

这是我正在尝试做的事情:

window.i = 0;

while(window.i < 10){
setTimeout(function(){alert(window.i);}, 2000);

window.i++;
}

两秒钟后,我收到十个警报,但他们都说'10'。有没有办法在超时中将变量“转换”为唯一变量?所以我可以得到像1,2,3,4 ......

的提醒

我不能使用字符串,它必须是一个函数。所以不是这样的:

setTimeout('alert(i);', 2000);

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要创建一个闭包来“捕获”i的每个值。否则,每个超时都将引用“最终”值。

var i = 0;
var timeoutFunc = function(i){
    return function(){
        alert(i);
    };
};

while(i < 10){
    setTimeout(timeoutFunc(i), 2000);

    i++;
}