for循环和setTimeout搭配使用问题

比如for(var i = 0; i < 5 ; i ++){} 我想当i=0时,然后定时器setTimeout(function(){console.log("a");},1000)1秒后输出一个a,i=1时再输出个a,以此类推,直到循环结束。应该怎么写呢?

阅读 7.5k
10 个回答

setInterval(function(){},1000)是每一秒执行一次函数。
请把你的问题描述的更清晰

setinterval 本身就是每1s执行一次程序,不需要循环。只执行一次的是settimeout。

如果你是想延时1s执行函数a,再延时1s执行函数b的话,只能嵌套settimeout

setTimeout(function(){
    //函数a
    setTimeout(function(){
        //函数b
    }, 1000);
}, 1000);

我在刚学这个的时候,会写一种错误的写法,如下:

setTimeout(function(){}, 1000);
(function (){
    //函数a
})()

这样函数a并不会延时1s执行,因为js是异步的,上面的延时不会阻塞下面函数的执行。我会发生这种写法是因为之前单片机程序写多了,自然而然就这么理解了。。

---------分割线---------

题目更改后,直接用setInterval就可以了,停止用clearInterval

可以参考一下这个函数:
for(var i = 0; i < 5; i++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, 1000);
})(i)
}

    var i = 0;
    var int = setInterval(function() {
        if(i < 5) {
            i ++;
            console.log("log: " + i);
        }
        else {
            clearInterval(int);
        }
    }, 1000);

这样就好了

for(var i = 0, j = 1; i < 5 ; i ++){
  setTimeout(function(){
    console.log("a");
  }, 1000 * j++);
} 

用了个笨办法 。

var n = 1;
for(var i = 0; i < 5; i++) {
    (function(i) {
        setTimeout(function() {
            console.log('第' + i + '个a');
        }, 1000 * n);
    })(i)
  n++;
}

题主描述的问题不是太清晰

如果每个1秒,输出a,可以使用setInterval

var i = 0,
        fun = setInterval(function() {
        if (i < 5) {
            console.log('a');
            i++;
        } else {
            clearInterval(fun);
        }
    },1000);
for (let i = 0; i < 100; i++) {
    setTimeout(function() {
        console.log(i);
    }, i * 1000);
}
<script>
    for(var i =0;i<5;i++){
        (function(i){
            setTimeout(function(){
                console.log("a")
            },1000 * (i+1))
        })(i)
    }
</script>

大概其是这个意思吧:

function bingo(str) {
    var i=0,j=0;
    return j=setInterval(function(){
        if (i<5) {
            console.log(str);
            i++;
        } else {
            clearInterval(j);
        }
    }, 1000);
}
bingo('a');
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题