曾看到一篇文章里面写道setInterval()有很多弊端:
1.setInterval对自己调用的代码是否报错漠不关心。即使调用的代码报错了,它依然会持续的调用下去
2.setInterval无视网络延迟。在使用ajax轮询服务器是否有新数据时,必定会有一些人会使用setInterval,然而无论网络状况如何,它都会去一遍又一遍的发送请求,"如果网络状况不良,一个请求发出,还没有返回结果,它会坚持不懈的继续发送请求,最后导致的结果就是请求堆积。
3.setInterval并不定时。如果它调用的代码执行的时间小于定时的时间,它会跳过调用,这就导致无法按照你需要的执行次数或无法得到你想要的结果。
为了解决这些弊端,可以使用settTimeout()代替setInterval()具体实现如下:
1.写一个interval方法
var timer = null
interval(func, wait){
var interv = function(){
func.call(null);
timer=setTimeout(interv, wait);
};
timer= setTimeout(interv, wait);
},
2.和setInterval()一样使用它
interval(function () {},20)
3.终止定时器
if(timer){
window.clearTimeout(timer);
timer=null;
}