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