?題目
? ? · 描述event loop(事件循環(huán) / 事件輪詢)的機制古毛,可畫圖
? ? · 什么是宏任務(wù)和微任務(wù),兩者有什么區(qū)別都许?
? ? · Promise有哪三種狀態(tài)稻薇?如何變化?
?知識點
? ? ? ? ?· event loop(事件循環(huán) / 事件輪詢 )
? ? ? ? ? ? ? ? 1. JS是單線程運行的
? ? ? ? ? ? ? ? 2.異步要基于回調(diào)來實現(xiàn)
? ? ? ? ? ? ? ? 3.event loop就是異步回調(diào)的實現(xiàn)原理
? ? ? ? · JS如何執(zhí)行
? ? ? ? ? ? ? ? 1.從前到后胶征,一行一行執(zhí)行
? ? ? ? ? ? ? ? 2.如果某一行執(zhí)行報錯塞椎,則停止下面代碼的執(zhí)行
? ? ? ? ? ? ? ? 3.先把同步代碼執(zhí)行完,再執(zhí)行異步
2異步:
異步 async 是相對于同步 async 而言的睛低,同步就是一件事一件事的執(zhí)行案狠。只有前一個任務(wù)執(zhí)行完畢,才能執(zhí)行后一個任務(wù)暇昂。
js中使用:
當(dāng)JS解析執(zhí)行時莺戒,會被引擎分為兩類任務(wù),同步任務(wù)(synchronous) 和 異步任務(wù)(asynchronous)急波。
對于同步任務(wù)來說从铲,會被推到執(zhí)行棧按順序去執(zhí)行這些任務(wù)。
對于異步任務(wù)來說澄暮,當(dāng)其可以被執(zhí)行時名段,會被放到一個 任務(wù)隊列 里等待JS引擎去執(zhí)行。
當(dāng)執(zhí)行棧中的所有同步任務(wù)完成后泣懊,JS引擎才會去任務(wù)隊列里查看是否有任務(wù)存在伸辟,并將任務(wù)放到執(zhí)行棧中去執(zhí)行,執(zhí)行完了又會去任務(wù)隊列里查看是否有已經(jīng)可以執(zhí)行的任務(wù)馍刮。這種循環(huán)檢查的機制信夫,就叫做事件循環(huán)。
同步任務(wù):
指的是在主線程上排隊執(zhí)行的任務(wù)卡啰,只有前一個任務(wù)執(zhí)行完畢静稻,才能執(zhí)行后一個任務(wù)。
異步任務(wù):
指的是不進入主線程匈辱,某個異步任務(wù)可以執(zhí)行了振湾,該任務(wù)才會進入主線程執(zhí)行。
**1. 同步和異步任務(wù)在不同的執(zhí)行"場所"亡脸,同步的進入主線程押搪,異步的進入Event Table執(zhí)行并注冊函數(shù)树酪。
JavaScript 執(zhí)行機制:
主線程任務(wù)——>微任務(wù)——>宏任務(wù)
如果宏任務(wù)里還有微任就繼續(xù)執(zhí)行宏任務(wù)里的微任務(wù),如果宏任務(wù)中的微任務(wù)中還有宏任務(wù)就在依次進行