This question already has answers here:
JavaScript closure inside loops – simple practical example
(44个答案)
3年前关闭。
下面是我的代码
并在每次1秒后显示6000 6000 6000 6000 6000。
但是我想使用setTimeout()显示1000 2000 3000 4000 5000
小提琴:https://jsfiddle.net/himavicii/jg2uvu1j/
这会将
(44个答案)
3年前关闭。
下面是我的代码
并在每次1秒后显示6000 6000 6000 6000 6000。
但是我想使用setTimeout()显示1000 2000 3000 4000 5000
小提琴:https://jsfiddle.net/himavicii/jg2uvu1j/
var i=0;
for(i=1000;i<6000;i+=1000)
{
setTimeout(function(){v(i)},i);
}
function v(h)
{
document.write(h+' ');
}
最佳答案
发生这种情况是因为所有超时都引用相同的i
变量。将超时包装在闭包中:
for(i=1000;i<6000;i+=1000)
{
(function(i){
setTimeout(function(){v(i)},i);
})(i);
}
这会将
i
作为参数传递给匿名函数,并且函数创建新作用域,因此该变量受到保护。09-26 16:29