JS事件循環(huán)的理解

  1. js引擎運行的環(huán)境就是宿主環(huán)境,通常就是Web瀏覽器、node
  2. js引擎提供一種機制來處理分塊執(zhí)行的代碼,這種機制就是事件循環(huán):

事件循環(huán)偽代碼:

var eventLoop = []; // eventLoop 作為隊列的數(shù)據(jù),存儲待執(zhí)行的事件
var event; // 當前要處理的事件
while(true){
  // 一次tick
if(eventLoop.length > 0){
    event = eventLoop.shift()
    try{
        // 執(zhí)行當前事件
        event()
    } catch (err){
        // 錯誤上報
        reportError(err)
    }
  }
}

  1. setTimeout()為什么不精準?
    因為setTimeout并沒有把你的回調(diào)函數(shù)掛在事件循環(huán)中。作為一個定時器,當設定時間到達后,環(huán)境才把你的回調(diào)函數(shù)放入事件循環(huán)中。這時候你的事件隊列可能很長了,所以這個回調(diào)執(zhí)行的時間完全依賴事件隊列的狀態(tài)決定。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容