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