小鄭詳解JavaScript的運行機制

第二,當前宏任務執行完成後,會查微任務的事件隊列,將將全部的微任務依次執行完,再去依次執行宏任務事件隊列。

上面代碼中promise的then是一微任務,因此它的執行在setTimeout之前。

需要注意的是:在node環境下,process.nextTick的優先級高於promise。也就是可以簡單理解為,在宏任務結束後會先執行微任務隊列中的nextTickQueue部分,然後才會執行微任務中的promise部分。

所以最後總結一下,對於文章一開頭提到的那段代碼,我們可以準確的理解為:

1秒後,setTimeout裡的函數會被推入event queue,而event queue(事件隊列)裡的任務,只有在主線程空閒時才會執行。也就是需要同時滿足兩個條件(1)1秒後。(2)主線程必須空閒,這樣1秒後才會執行該函數。

現在,關於JavaScript的運行機制,大家應該都理解了,有問題歡迎留言。


分享到:


相關文章: