首先:我没有使用全局变量。我只是在这个例子中使用它们来简化操作。我实际上将它们附加到另一个对象而不是窗口。
这是我正在尝试做的事情:
window.i = 0;
while(window.i < 10){
setTimeout(function(){alert(window.i);}, 2000);
window.i++;
}
两秒钟后,我收到十个警报,但他们都说'10'。有没有办法在超时中将变量“转换”为唯一变量?所以我可以得到像1,2,3,4 ......
的提醒我不能使用字符串,它必须是一个函数。所以不是这样的:
setTimeout('alert(i);', 2000);
谢谢!
答案 0 :(得分:1)
您需要创建一个闭包来“捕获”i
的每个值。否则,每个超时都将引用“最终”值。
var i = 0;
var timeoutFunc = function(i){
return function(){
alert(i);
};
};
while(i < 10){
setTimeout(timeoutFunc(i), 2000);
i++;
}