这种重复定时器的规则有两个问题:(1) 某些间隔会被跳过;(2) 多个定时器的代码执行之间的间隔
可能会比预期的小
为了避免setInterval()的重复定时器的这2个缺点,你可以用如下模式使用链式setTimeout()
调用
//注意 es6 箭头函数 没有this 和 arguments
setTimeout(function(){
//处理中
setTimeout(arguments.callee, interval);
}, interval);
这个模式链式调用了 setTimeout(),每次函数执行的时候都会创建一个新的定时器。第二个
setTimeout()调用使用了 arguments.callee 来获取对当前执行的函数的引用,并为其设置另外一
个定时器。这样做的好处是,在前一个定时器代码执行完之前,不会向队列插入新的定时器代码,确保
不会有任何缺失的间隔