摘要:一旦異步任務(wù)指定的事情完成過后,其對(duì)應(yīng)的回調(diào)函數(shù)移入。事件完成,回調(diào)函數(shù)進(jìn)入。主線程為空過后,主線程從讀取回調(diào)函數(shù)并執(zhí)行這張圖告訴我們我們對(duì)任務(wù)有更精細(xì)的定義宏任務(wù)包括整體代碼,,微任務(wù),不同類型的任務(wù)會(huì)進(jìn)入對(duì)應(yīng)的,比如和會(huì)進(jìn)入相同的。
javascript是單線程語(yǔ)言,所以javascript是按照語(yǔ)句出現(xiàn)的順序執(zhí)行的。既然javascript是單線程語(yǔ)言,那么js任務(wù)也要一個(gè)一個(gè)順序執(zhí)行。如果一個(gè)任務(wù)耗時(shí)過長(zhǎng),那么后一個(gè)任務(wù)也必須等著。這樣不利于開發(fā),所以需要將任務(wù)分為兩類:1、同步任務(wù);2、異步任務(wù);
這張圖片告訴我們:
1、分清楚什么是同步任務(wù)、哪個(gè)是異步任務(wù),同步任務(wù)和異步任務(wù)進(jìn)入不同的場(chǎng)所,同步任務(wù)進(jìn)入主流程棧中,異步的進(jìn)入Event Table并注冊(cè)函數(shù)。
2、一旦異步任務(wù)指定的事情完成過后,其對(duì)應(yīng)的回調(diào)函數(shù)移入Event Queue。
3、主線程內(nèi)的任務(wù)執(zhí)行完畢為空,會(huì)去Event Queue讀取對(duì)應(yīng)的函數(shù),進(jìn)入主線程執(zhí)行
4、上述過程會(huì)不斷重復(fù),也就是常說的Event Loop(事件循環(huán))(事件循環(huán)根據(jù)判斷宏任務(wù)是否執(zhí)行結(jié)束)
例子1:
let data = [];
$.ajax({
url:www.javascript.com, data:data, success:() => { console.log("發(fā)送成功!"); }
})
console.log("代碼執(zhí)行結(jié)束");
分析:
1、ajax進(jìn)入Event Table,注冊(cè)回調(diào)函數(shù)success
2、ajax是異步任務(wù),同步任務(wù)console.log("代碼執(zhí)行結(jié)束")會(huì)掛到主線程上執(zhí)行。
3、ajax事件完成,回調(diào)函數(shù)success進(jìn)入Event Queue。
4、主線程為空過后,主線程從Event Queue讀取回調(diào)函數(shù)success并執(zhí)行
這張圖告訴我們:
1、我們對(duì)任務(wù)有更精細(xì)的定義:
macro-task(宏任務(wù)):包括整體代碼script,setTimeout,setInterval
micro-task(微任務(wù)):Promise,process.nextTick
不同類型的任務(wù)會(huì)進(jìn)入對(duì)應(yīng)的Event Queue,比如setTimeout和setInterval會(huì)進(jìn)入相同的Event Queue。
2、進(jìn)入整體代碼(宏任務(wù))(同步任務(wù))后,開始第一次循環(huán)。接著執(zhí)行所有的微任務(wù)。然后再次從宏任務(wù)開始,找到其中一個(gè)任務(wù)隊(duì)列執(zhí)行完畢,再執(zhí)行所有的微任務(wù)
作者:ssssyoki
鏈接:https://juejin.im/post/59e85e...
來(lái)源:掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/108206.html
摘要:深入理解引擎的執(zhí)行機(jī)制靈魂三問為什么是單線程的為什么需要異步單線程又是如何實(shí)現(xiàn)異步的呢中的中的說說首先請(qǐng)牢記點(diǎn)是單線程語(yǔ)言的是的執(zhí)行機(jī)制。 深入理解JS引擎的執(zhí)行機(jī)制 1.靈魂三問 : JS為什么是單線程的? 為什么需要異步? 單線程又是如何實(shí)現(xiàn)異步的呢? 2.JS中的event loop(1) 3.JS中的event loop(2) 4.說說setTimeout 首先,請(qǐng)牢記2...
摘要:深入理解引擎的執(zhí)行機(jī)制最近在反省,很多知識(shí)都是只會(huì)用,不理解底層的知識(shí)。在閱讀之前,請(qǐng)先記住兩點(diǎn)是單線程語(yǔ)言的是的執(zhí)行機(jī)制。所以,是存在異步執(zhí)行的,比如單線程是怎么實(shí)現(xiàn)異步的場(chǎng)景描述通過事件循環(huán),所以說,理解了機(jī)制,也就理解了的執(zhí)行機(jī)制啦。 深入理解js引擎的執(zhí)行機(jī)制 最近在反省,很多知識(shí)都是只會(huì)用,不理解底層的知識(shí)。所以在開發(fā)過程中遇到一些奇怪的比較難解決的bug,在思考的時(shí)候就會(huì)收...
摘要:一直以來(lái),對(duì)的執(zhí)行機(jī)制都是模棱兩可,知道今天看了文章這一次,徹底弄懂執(zhí)行機(jī)制和的規(guī)范和實(shí)現(xiàn),才對(duì)的執(zhí)行機(jī)制有了深入的理解,下面是我的學(xué)習(xí)總結(jié)。個(gè)要點(diǎn)是單線程語(yǔ)言是的執(zhí)行機(jī)制,為了實(shí)現(xiàn)主線程的不阻塞,就這么誕生了。 一直以來(lái),對(duì)JS的執(zhí)行機(jī)制都是模棱兩可,知道今天看了文章—《這一次,徹底弄懂JavaScript執(zhí)行機(jī)制》和《Event Loop的規(guī)范和實(shí)現(xiàn)》,才對(duì)JS的執(zhí)行機(jī)制有了深入的...
摘要:心塞塞根據(jù)規(guī)范,事件循環(huán)是通過任務(wù)隊(duì)列的機(jī)制來(lái)進(jìn)行協(xié)調(diào)的。等便是任務(wù)源,而進(jìn)入任務(wù)隊(duì)列的是他們指定的具體執(zhí)行任務(wù)回調(diào)函數(shù)。然后當(dāng)前本輪的結(jié)束,主線程可以繼續(xù)取下一個(gè)執(zhí)行。 依然是:經(jīng)濟(jì)基礎(chǔ)決定上層建筑。 說明 首先,旨在搞清常用的同步異步執(zhí)行機(jī)制 其次,暫時(shí)不討論node.js的Event Loop執(zhí)行機(jī)制,以下關(guān)于瀏覽器的Event Loop執(zhí)行機(jī)制 最后,借鑒了很多前輩的研究文...
摘要:事件表每次調(diào)用函數(shù)或執(zhí)行異步操作時(shí),都會(huì)將其添加到事件表中,事件表負(fù)責(zé)記錄每個(gè)事件完成后執(zhí)行的回調(diào)函數(shù),并監(jiān)聽事件,事件完成后會(huì)把事件的回調(diào)函數(shù)發(fā)送到事件隊(duì)列。事件隊(duì)列事件隊(duì)列接收來(lái)自事件表的回調(diào)函數(shù),并根據(jù)順序執(zhí)行。 前言 先上一段代碼,可以根據(jù)自己之前對(duì)JS執(zhí)行機(jī)制的理解,進(jìn)行分析 console.log(script start); setTimeout(function() ...
摘要:異步任務(wù)必須指定回調(diào)函數(shù),當(dāng)異步任務(wù)從任務(wù)隊(duì)列回到執(zhí)行棧,回調(diào)函數(shù)就會(huì)執(zhí)行。事件循環(huán)主線程從任務(wù)隊(duì)列中讀取事件,這個(gè)過程是循環(huán)不斷的,所以整個(gè)的這種運(yùn)行機(jī)制又稱為。事件循環(huán)事件循環(huán)是指主線程重復(fù)從消息隊(duì)列中取消息執(zhí)行的過程。 參考鏈接:這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制https://zhuanlan.zhihu.com/p/...從瀏覽器多進(jìn)程到JS單線程,JS運(yùn)行機(jī)制...
閱讀 1165·2021-10-14 09:43
閱讀 1222·2021-10-11 11:07
閱讀 3164·2021-08-18 10:23
閱讀 1540·2019-08-29 16:18
閱讀 1058·2019-08-28 18:21
閱讀 1539·2019-08-26 12:12
閱讀 3826·2019-08-26 10:11
閱讀 2567·2019-08-23 18:04