国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js執行機制

joyvw / 2633人閱讀

摘要:在上面代碼中,進入宏任務,并將注冊為宏任務放入隊列,接著執行哈哈哈,遇到直接執行,回調函數放置微任務隊列,接著執行嘻嘻嘻,第二個如上。

在實際開發中,總是遇到請求結束后,想要把請求得到數據賦值給某一個對象或者變量,如果沒有在請求的回調函數中賦值,而是在請求語句下面賦值,我們會發現請求得到數據正常,但是賦值后的變量是undefined。這是為什么呢?
首先,我們要了解一個概念,就是同步與異步。眾所周知,js是單線程語言,也就是說,js一次只能執行一個任務,如果有多個任務的話呢,那就按照任務的順序依次執行。但是如果其中某一個任務耗費大量時間,比如陷入死循環,那么其他任務都不能執行,會造成瀏覽器無響應。那么js是如何解決的呢?那就是將任務分為同步和異步模式進行執行。同步如上,異步呢是指,擁有大于一個的回調函數,任務在執行結束時不是執行下一個任務而是執行回調函數,那么有人可能會有疑問,這樣做與同步有什么區別呢?區別在于,后一個任務不用等前一個任務完全執行后再去執行。因此我們得到的程序執行順序不是任務的排列順序。

setTimeout(function(){
    console.log("第一個延時調用");
});
console.log("哈哈哈");
new Promise(function(resolve){
    console.log("promise任務嗎");
    resolve();
}).then(function(){
    console.log("回調函數???")
});
console.log("嘻嘻嘻");
setTimeout(function(){
    console.log("第二個延時調用");
});

執行結果是什么呢?
哈哈哈
promise任務嗎
嘻嘻嘻
回調函數???

第一個延時調用
第二個延時調用
為什么是這樣呢?為什么setTimeout會在最后才執行,明明是0ms啊。
是因為除了同步異步模式外,我們對任務還有進一步的劃分,宏任務微任務
宏任務:包括整體代碼script,setTimeout,setInterval
微任務:Promise,process.nextTick
在執行時,進入宏任務后,開始第一次循環,接著執行所有微任務,然后在進行宏任務的下次循環。
在上面代碼中,進入宏任務,并將setTimeout注冊為宏任務放入隊列,接著執行哈哈哈,遇到new Promise 直接執行,回調函數放置微任務隊列,接著執行嘻嘻嘻,第二個setTimeout如上。接著執行微任務,這里僅有嘻嘻嘻。最后進入下次宏任務。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96842.html

相關文章

  • 10分鐘理解JS引擎的執行機制

    摘要:深入理解引擎的執行機制靈魂三問為什么是單線程的為什么需要異步單線程又是如何實現異步的呢中的中的說說首先請牢記點是單線程語言的是的執行機制。 深入理解JS引擎的執行機制 1.靈魂三問 : JS為什么是單線程的? 為什么需要異步? 單線程又是如何實現異步的呢? 2.JS中的event loop(1) 3.JS中的event loop(2) 4.說說setTimeout 首先,請牢記2...

    zzbo 評論0 收藏0
  • 深入理解js引擎的執行機制

    摘要:深入理解引擎的執行機制最近在反省,很多知識都是只會用,不理解底層的知識。在閱讀之前,請先記住兩點是單線程語言的是的執行機制。所以,是存在異步執行的,比如單線程是怎么實現異步的場景描述通過事件循環,所以說,理解了機制,也就理解了的執行機制啦。 深入理解js引擎的執行機制 最近在反省,很多知識都是只會用,不理解底層的知識。所以在開發過程中遇到一些奇怪的比較難解決的bug,在思考的時候就會收...

    feng409 評論0 收藏0
  • 前端進階系列(八):JS執行機制

    摘要:一直以來,對的執行機制都是模棱兩可,知道今天看了文章這一次,徹底弄懂執行機制和的規范和實現,才對的執行機制有了深入的理解,下面是我的學習總結。個要點是單線程語言是的執行機制,為了實現主線程的不阻塞,就這么誕生了。 一直以來,對JS的執行機制都是模棱兩可,知道今天看了文章—《這一次,徹底弄懂JavaScript執行機制》和《Event Loop的規范和實現》,才對JS的執行機制有了深入的...

    JackJiang 評論0 收藏0
  • Event Loop - JS執行機制

    摘要:心塞塞根據規范,事件循環是通過任務隊列的機制來進行協調的。等便是任務源,而進入任務隊列的是他們指定的具體執行任務回調函數。然后當前本輪的結束,主線程可以繼續取下一個執行。 依然是:經濟基礎決定上層建筑。 說明 首先,旨在搞清常用的同步異步執行機制 其次,暫時不討論node.js的Event Loop執行機制,以下關于瀏覽器的Event Loop執行機制 最后,借鑒了很多前輩的研究文...

    muddyway 評論0 收藏0
  • JS執行機制

    摘要:事件表每次調用函數或執行異步操作時,都會將其添加到事件表中,事件表負責記錄每個事件完成后執行的回調函數,并監聽事件,事件完成后會把事件的回調函數發送到事件隊列。事件隊列事件隊列接收來自事件表的回調函數,并根據順序執行。 前言 先上一段代碼,可以根據自己之前對JS執行機制的理解,進行分析 console.log(script start); setTimeout(function() ...

    wow_worktile 評論0 收藏0
  • Javascript系列之javascript機制

    摘要:異步任務必須指定回調函數,當異步任務從任務隊列回到執行棧,回調函數就會執行。事件循環主線程從任務隊列中讀取事件,這個過程是循環不斷的,所以整個的這種運行機制又稱為。事件循環事件循環是指主線程重復從消息隊列中取消息執行的過程。 參考鏈接:這一次,徹底弄懂 JavaScript 執行機制https://zhuanlan.zhihu.com/p/...從瀏覽器多進程到JS單線程,JS運行機制...

    13651657101 評論0 收藏0

發表評論

0條評論

joyvw

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<