定時器介紹
setTimeout 用于指定多少毫秒數后調用函數或進行計算,例:
setTimeout(function(){
console.log("aa");
},1000);
上段代碼會在1s后在控制臺輸出“aa”,而且只運行一次,運行完就結束
setTimeout創建的定時器會返回一個ID值,利用這個ID值配合clearTimeout可以取消要延遲執行的代碼:
var t = setTimeout(function(){
console.log("aa");
},1000);
clearTimeout(t);
setInterval() 同樣用于指定多少毫秒數后調用函數或進行計算,但其是重復的檢測和執行
var t = setInterval(function(){
console.log("aa");
},1000);
上面代碼會每隔1s在控制臺輸出“aa”;
同樣的,setInterval創建的定時器可以用clearInterval()來取消
clearInterval(t);
定時器的問題:
setTimeout()是不精準的,例如使用setTimeout設定一個任務在10ms后執行,但是在9ms時,有一個任務占用了5ms的cpu時間片,再次輪到定時器執行時,時間已經過期4s,所以說是不精準的
setInterval()也存在兩個問題,
- 時間間隔可能會跳過
- 時間間隔可能小于定時器設置時間
可以使用setTimeout遞歸調用
setTimeout(function(){
//processing
setTimeout(arguments.callee,interval);
},interval);//arguments.callee用來獲取當前執行的函數的引用,并為其設置另一個計時器