首页 新闻 会员 周边 捐助

setTimeout链式操作

0
[已解决问题] 解决于 2017-02-13 19:36
    var i = 0;
    setTimeout(function(){
        console.log(++i);
        console.log('start:' + new Date());
        for (var j = 0; j < 1000000000; j++) {
            s = j * j;
        }
        console.log('end:' + new Date());
        if (i < 10) {
            setTimeout(arguments.callee,1000)
        }
    },1000);

代码如上,使用setTimeout的链式操作代替setInterval可以避免setInterval的缺陷。在上面这段代码发现一个奇怪的问题。中间的for循环的执行时间,在这段代码中是将近20s,也就是start和end之间相差的时间是20秒。但如果删掉最后面的if里面的setTimeout语句,for循环的时间是差不多10秒。

请问这是为什么。

美儿宝的主页 美儿宝 | 初学一级 | 园豆:200
提问于:2017-02-10 21:54
< >
分享
最佳答案
0

arguments.callee 也许有性能问题。也许无法被解析器优化。
var i = 0;
setTimeout(function test(){
console.log(++i);
console.log('start:' + new Date());
for (var j = 0; j < 1000000000; j++) {
s = j * j;
}
console.log('end:' + new Date());
if (i < 10) {
setTimeout(test,1000)
}
},1000);

换成这样没问题。


奖励园豆:5
长蘑菇星人 | 小虾三级 |园豆:1832 | 2017-02-13 13:01

谢谢!

美儿宝 | 园豆:200 (初学一级) | 2017-02-13 19:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册