javascript - for循环和setTimeout搭配使用问题
高洛峰
高洛峰 2017-04-11 12:09:37
[JavaScript讨论组]

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(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

PHPz

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

PHP中文网
    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++);
} 
PHP中文网

用了个笨办法 。

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');
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号