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秒。
请问这是为什么。
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);
换成这样没问题。
谢谢!