鹽城做百度網站百度推廣服務費3000元
同步任務和異步任務
同步任務
同步任務就是沒有被引擎掛起、在主線程上排隊執(zhí)行的任務。只有前一個任務執(zhí)行完,才會執(zhí)行下一個任務。同步任務具有堵塞效果。
異步任務
異步任務是被引擎放在一邊,不進入主線程進入任務隊列的任務。只有引擎認為某個異步任務可以執(zhí)行了,該任務才會進入主線程去執(zhí)行。排在異步后面的代碼不用等待異步結束會馬上執(zhí)行,異步任務不具有堵塞效果。
?任務隊列和事件循環(huán)
?任務隊列:
js在運行時,除了正在運行的主線程還有一個任務隊列,里面是各種需要當前程序處理的異步任務。
主線程會先執(zhí)行所有的同步任務,同步任務執(zhí)行完畢后會去任務隊列里面的異步任務。如果滿足條件,那么異步任務就重新進入主線程開始執(zhí)行,這時它就變成同步任務了。等到執(zhí)行完,下一個異步任務再進入主線程開始執(zhí)行。一旦任務隊列清空,程序就結束執(zhí)行。
任務隊列分為兩種:宏任務隊列和微任務隊列宏任務是指主線程上的任務,它們會在主線程上執(zhí)行。常見的宏任務包括 setTimeout, setInterval, setImmediate, requestAnimationFrame, I/O, UI rendering 等。宏任務一般是與瀏覽器的渲染相關的任務。
微任務是指在主線程上執(zhí)行的任務之前或之后立即執(zhí)行的任務。常見的微任務包括 Promise.then, process.nextTick, Object.observe, MutationObserver 等。微任務一般是與 JavaScript 代碼的執(zhí)行相關的任務。
事件循環(huán):
只要同步任務執(zhí)行完后,引擎會去檢索異步任務有沒有結果、能不能進入主線程。一遍又一遍,這種循環(huán)檢查的機制就叫做事件循環(huán)機制
?