眾所周知,Javacript 是單執行緒語言,但是為什麼我們可以使用非同步操作呢?因為非同步操作是由具有多執行緒、多進程能力的瀏覽器執行的。 Javascript總是運行在單線程上,當非同步程式碼被發現時,就會交給瀏覽器執行,然後瀏覽器調用相應的線程或進程,包括http請求、GUI、事件觸發等來處理這些非同步操作.
一般來說,Javasctip 任務可以分為三類:同步任務、微任務、巨集任務,運行順序為sync -> 任務。微->宏。首先執行同步程式碼,然後瀏覽器會將微程式碼放入等待同步任務完成的微任務佇列中,並將巨集程式碼放入等待微程式碼完成的巨集任務佇列中。
這個優先權順序類似於OS上的多層回饋佇列調度演算法。
常見微任務:Promise.then()、Promise.catch()、new MutationObserver()、process.nextTick()
常用巨集任務:setTimeout、setInterview、requestAnimationFrame()
順便說一下,process.nextTick() 既不是微任務也不是巨集任務,它只是在同步程式碼之後、微任務之前執行。
以上是Javascript事件循環規則詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!