扫码关注官方订阅号
以上代码每次都是弹出3,我想延时依次弹出 1、2、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);
for(var i=1;i<=3;i++){ (function(i){ setTimeout(function(){ alert(i); },1000); })(i); }
延时1秒正确,但是延时10秒答案就成1 3 2了.这个要去研究研究了.
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
楼主的代码加上问题说明..有点难以揣测其目的..
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);for(var i=1;i<=3;i++){ (function(i){ setTimeout(function(){ alert(i); },1000); })(i); }延时1秒正确,但是延时10秒答案就成1 3 2了.这个要去研究研究了.