JavaScript 循环加载定时器的问题
天蓬老师
天蓬老师 2017-04-10 12:43:38
[JavaScript讨论组]

以上代码每次都是弹出3,我想延时依次弹出 1、2、3 不知道怎么做?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
阿神

楼主的代码加上问题说明..有点难以揣测其目的..

1、如果是延迟10s,立刻弹出1、2、3,从“延迟”这个词只出现一次来看,只要一个定时器就够了,并不需要循环创建三个定时器,所以代码应该是:

setTimeout(function() {
	for(var i = 1; i < 4; i++) {
		console.log(i);
	}
}, 10000);

而忠邦君的代码相当于

setTimeout(function() {alert(1);}, 1000);
setTimeout(function() {alert(2);}, 1000);
setTimeout(function() {alert(3);}, 1000);

因为@felix021 同学所说的调度算法的原因,三个定时器几乎同时创建后其中的函数执行的顺序是不一定的,所以什么可能性都会有...不要相信那真的是1000ms.....

2、如果是延迟10s,弹出1,再延迟10s,弹出2,再延迟10s,弹出3,那是要三个定时器的,比如@felix021 的递归代码。

换个思路也可以是:

//var t = new Date();
for (var i = 1; i < 4; i++) {
	! function(_i) {
		setTimeout(function() {
			//console.log(t - (t = new Date()));
			console.log(_i);
		}, _i * 10000);
	}(i)
}

3、如果只是为了调试,不要用alert,会阻塞,从而产生与实际不符的情况。

阿神
var counter = 0;
function incr() {
    counter += 1; 
    alert(counter);
    if (counter < 3)
        setTimeout("incr()", 1000);
}
setTimeout("incr()", 1000);
PHP中文网
for(var i=1;i<=3;i++){  
(function(i){
    setTimeout(function(){
    	alert(i);
    },1000);
})(i);
}

延时1秒正确,但是延时10秒答案就成1 3 2了.这个要去研究研究了.

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

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