本篇文章透過分析一段程式碼的列印順序,帶大家深入了解javascript中的事件執行機制,希望對大家有幫助!
前段時間一道筆試題,有點迷糊。今天徹底分析下JS的事件執行機制。 【相關推薦:javascript學習教學】
各位小夥伴可以試著寫出列印順序
JS
主要作為瀏覽器的腳本語言,Js
的主要用途是操作DOM,這決定了JS
必須是單線程,如果JS
如Java一樣是多線程,如果兩個線程同時操作DOM,那麼瀏覽器該怎麼執行呢?
JS
的發布其實是為了蹭Java的熱度,其中寫這門語言的時間並不久,所以這也就是為什麼JS是單線程的原因
JS既然是單線程,那麼必然會對任務進行一個排序。所有的任務都將依照一個規則執行下去。
同步任務
非同步任務
同步任務和非同步任務進入執行堆疊中,JS會先判斷任務的型別
是同步任務,直接進入主執行緒
是異步任務,進入Event Table
中,註冊回呼函數Event Queue
#同步任務全部執行結束,JS會Event Queue
中讀取函數執行
這個程序會重複執行,直到全部任務執行結束。這就是我們常說的事件循環
emmmm,我不知道。 。 。 。 JS應該有一套自己獨有的邏輯去判斷執行棧是否為空。
非同步的任務執行順序為:巨集任務->微任務
非同步任務可分為
巨集任務
微任務
#I/0
setTimeout
#setInterval
vite 之前配置的插件,版本有些問題,不要管這個紅色警報
開始了
執行
task( )
a end
成為了非同步任務的微任務,進入執行堆疊中,
目前為止,同步任務佇列依序是開始了,
a,
b
微任務:a end
如果沒有後續程式碼,列印順序如下
setTimeout列印在
a end之後呢?
看這張圖setTimeout
#a
b
c
d
setTimeout 巨集任務
############################################ ##所以印刷順序如下###############後記######自己對JS執行機制的理解,可能會有些不正確的地方,希望各位大佬指出。 ######【相關影片教學推薦:###web前端###】####以上是深入分析下JS中的事件執行機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!