曾看到一篇文章裏面寫道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.clearSetTimeout(timer);
timer=null;
}