亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

JavaScript事件循環(huán)及宏任務微任務原理解析

瀏覽:76日期:2023-10-16 08:54:59

首先看一段代碼:

JavaScript事件循環(huán)及宏任務微任務原理解析

打印順序是什么?

正確答案:script start, script end, promise1, promise2, setTimeout

其中涉及到事件循環(huán)(event loop),宏任務(macrotask),微任務(microtask)

一、事件循環(huán) Event Loop

程序中設置兩個線程:一個負責程序本身的運行,稱為'主線程';另一個負責主線程與其他進程(主要是各種I/O操作)的通信,被稱為'Event Loop線程'(可以譯為'消息線程')。

所有任務可以分成兩種,一種是同步任務(synchronous),另一種是異步任務(asynchronous)。

同步任務指的是,在主線程上排隊執(zhí)行的任務,只有前一個任務執(zhí)行完畢,才能執(zhí)行后一個任務;

異步任務指的是,不進入主線程、而進入'任務隊列'(task queue)的任務,只有'任務隊列'通知主線程,某個異步任務可以執(zhí)行了,該任務才會進入主線程執(zhí)行。

一般而言,異步任務有以下三種類型:

1、普通事件,如click、resize等

JavaScript事件循環(huán)及宏任務微任務原理解析

2、資源加載,如load、error等

JavaScript事件循環(huán)及宏任務微任務原理解析

3、定時器,包括setInterval、setTimeout等

JavaScript事件循環(huán)及宏任務微任務原理解析

事件循環(huán)具體過程就是:

同步任務進入主線程,異步任務進入Event Table并注冊函數(shù)。 當異步任務完成時,Event Table會將這個函數(shù)移入Event Queue。 主線程內(nèi)的任務執(zhí)行完畢執(zhí)行棧為空,會去Event Queue讀取對應的函數(shù),進入主線程執(zhí)行。 上述過程會不斷重復,也就是常說的Event Loop(事件循環(huán))。

二、宏任務與微任務

在JavaScript中,任務被分為兩種,一種宏任務(MacroTask),一種叫微任務(MicroTask)。

2.1MacroTask(宏任務)

宿主環(huán)境提供的(瀏覽器和node)

script全部代碼、setTimeout、setInterval。

瀏覽器為了能夠使得JS內(nèi)部task與DOM任務能夠有序的執(zhí)行,會在一個task執(zhí)行結束后,在下一個 task 執(zhí)行開始前,對頁面進行重新渲染 (task->渲染->task->...)

2.2MicroTask(微任務)

語言標準提供的

Promise、await

async函數(shù)表示函數(shù)里面可能會有異步方法,await后面跟一個表達式,async方法執(zhí)行時,遇到await會立即執(zhí)行表達式,然后把await表達式后面的代碼放到微任務隊列里,讓出執(zhí)行棧讓同步代碼先執(zhí)行

async function foo() { var a = await new Promise((resolve) => { setTimeout(() => { resolve(1); }, 2000); }); console.log(a); // 第2秒時輸出: 1}foo();

2.3宏任務與微任務執(zhí)行順序:

執(zhí)行棧在執(zhí)行完同步任務后,查看執(zhí)行棧是否為空,如果執(zhí)行棧為空,就會去檢查微任務隊列是否為空,如果為空的話,就執(zhí)行宏任務,否則就一次性執(zhí)行完所有微任務。 每次單個宏任務執(zhí)行完畢后,檢查微任務隊列是否為空,如果不為空的話,會按照先入先出的規(guī)則全部執(zhí)行完微任務后,設置微任務隊列為null,然后再執(zhí)行宏任務,如此循環(huán)。

總結:同步—>微任務—>宏任務

JavaScript事件循環(huán)及宏任務微任務原理解析

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 中国一级特黄剌激爽毛片 | 色影影院 | 亚洲作爱视频 | 性做久久久久久久久25的美女 | 亚洲国产精品不卡毛片a在线 | 青草精品视频 | 露脸一二三区国语对白 | 丁香婷婷综合五月综合色啪 | 日韩a在线播放 | 欧美5g影院天天5g天天看 | 久久美女精品国产精品亚洲 | 国产露脸无套在线观看 | 免费香蕉依人在线视频久 | 99热在线只有精品 | 国产美女免费国产 | 日本特黄特黄刺激大片免费 | 亚洲国产午夜看片 | 国语对白清晰好大好白 | 2019国内精品久久久久久 | 国产一区二区三区在线观看影院 | 国产精品美女免费视频大全 | 福利午夜国产网站在线不卡 | 亚洲欧洲日韩国产一区二区三区 | 日韩欧美亚洲综合一区二区 | 天天综合久久 | 久久成人亚洲 | 久久久国产在线 | 黄色网址发给我 | 国产精品久久久视频 | 麻豆网在线观看 | 亚洲国产成人久久三区 | 国模精品一区二区三区 | 国产综合成人观看在线 | 欧美bbww| 精品一久久香蕉国产线看观 | 国内精品久久久久久久aa护士 | 人体大胆做受免费视频 | 黄页成人免费网站 | 欧美一区二区在线观看视频 | 大伊香蕉在线观看视频 wap | 国产乱人乱精一区二区视频密 |