大概半年前發表過一篇關于setTimeout和setInterval的文章,但是現在回去仔細一看發現其實存在很多不足以及錯誤。事實上,setTimeout和setInterval并沒有我們字面上理解的那么簡單。要真正掌握并理解這兩個方法,還得從javascript的單線程機制說起。
【開門見山】setTimeout和setInterval是如何工作的呢?
我們知道,js是單線程執行的。所以其實setTimeout和setInterval所謂的“異步調用”事實上是通過將代碼段插入到代碼的執行隊列中實現的。
而如何計算插入的時間點呢?自然是要用到我們所說的timer,也就是計時器。當執行setTimeout和setInterval的時候,timer會根據你設定的時間“準確”地找到代碼的插入點。當隊列“正常”地執行到插入點時,就觸發timer callback,也就是我們設定的回調函數:
復制代碼 代碼如下:
function fn() {
/*
here is some codes
*/
setTimeout(function() {alert('ok!')},1000);
}
復制代碼 代碼如下:
function fn() {
setTimeout(function(){alert('can you see me?');},1000);
while(true) {}
}
新聞熱點
疑難解答
圖片精選