setTimeout不能按要求工作

时间:2016-04-08 13:09:26

标签: javascript

下面是我的代码
每次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+' ');
}

2 个答案:

答案 0 :(得分:3)

这是因为所有超时都指的是同一个i变量。将超时包装在一个闭包中:

for(i=1000;i<6000;i+=1000)
{
    (function(i){
        setTimeout(function(){v(i)},i);
    })(i);
}

这将i作为参数传递给匿名函数,函数创建一个新范围,因此该变量受到保护。

答案 1 :(得分:3)

var i=0;
for(i=1000;i<6000;i+=1000)
{
    timeoutFun(i);
}

function timeoutFun(t){
  setTimeout(function(){
       v(t);
    },t);
}
function v(h)
{
    document.write(h+' ');
}

https://jsfiddle.net/shadiq_aust/s4078702/