亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript?微任務和宏任務講解

 更新時間:2021年12月23日 11:34:04   作者:toinghub  
這篇文章主要分享了JavaScript?微任務和宏任務講解,在js中,我們一般將所有的任務都分成兩類,一種是同步任務,另外一種是異步任務。而在異步任務中,又有著更加細致的分類,那就是微任務和宏任務,下面來一起學習js中的微任務和宏任務吧

前言:

js是一門單線程語言,所以它本身是不可能異步的,但是js的宿主環(huán)境(比如瀏覽器、node)是多線程,宿主環(huán)境通過某種方式(事件驅(qū)動)使得js具備了異步的屬性。而在js中,我們一般將所有的任務都分成兩類,一種是同步任務,另外一種是異步任務。而在異步任務中,又有著更加細致的分類,那就是微任務和宏任務

1.概念

1.1宏任務

宏任務 ---- setTimeout、setInterval、DOM事件、AJAX請求

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

1.2微任務

微任務 ---- Promise、async/await

微任務通常來說就是需要在當前 同步任務 執(zhí)行結束后立即執(zhí)行的任務,比如對一系列動作做出反饋,或者是需要異步的執(zhí)行任務而又不需要分配一個新的任務,這樣便可以減小一點性能的開銷。

2.執(zhí)行順序

先來看一段代碼,在來探討執(zhí)行順序:

   console.log(1)
    setTimeout(() => {
      console.log(2)
    })
    Promise.resolve().then(() => {
      console.log(3)
    })
    console.log(4)


上面段代碼打印的結果為1 4 3 2 。從上面代碼,可以得出他們的執(zhí)行順序是:

? 先執(zhí)行同步代碼,遇到異步宏任務時候則將異步宏任務放入宏任務隊列中,遇到異步微任務的時候則將異步微任務放入微任務列表中,當所有的同步代碼執(zhí)行完畢后,在將異步微任務從列表中調(diào)入主線程執(zhí)行,異步微任務執(zhí)行完畢之后再將異步宏任務從隊列中調(diào)入主線程執(zhí)行,一直循環(huán)到素有任務執(zhí)行完畢。

注意:微任務執(zhí)行下先于頁面渲染的

3.任務關系

宏任務是主流,當js開始被執(zhí)行的時候,就是開啟一個宏任務,在宏任務中執(zhí)行一條一條的指令,宏任務可以同時擁有多個,但是會按照順序一個一個執(zhí)行。

每一個宏任務,后面都可以跟著一個微任務隊列,如果微任務隊列中有指令或者方法,則先執(zhí)行。如果沒有,則開始執(zhí)行下一個宏任務,知道所有的宏任務執(zhí)行完畢。

4.任務詳解

為什么有了宏任務后,還是會有微任務的存在?那是因為宏任務太占用性能,當需要一些較早就準備好的方法,排在最后才執(zhí)行的時候,又不想新增一個宏任務,那么就可以把這些方法,一個一個的放在微任務隊列里面,在這個宏任務中的代碼執(zhí)行完后,就會執(zhí)行微任務隊列。

因此當前同步代碼執(zhí)行,遇到異步任務,如果是異步宏任務,放入下一輪宏任務隊列,是異步微任務,放入微任務隊列跟在當前宏任務屁股后面。微任務相當于宏任務的小尾巴,因此當前宏任務執(zhí)行完,在它后面等著的異步微任務就會被立刻放入隊列繼續(xù)執(zhí)行。而異步的宏任務需要等到下一輪,從而造成了異步中微任務在宏任務之前執(zhí)行的情況。

到此這篇關于JavaScript 微任務和宏任務講解的文章就介紹到這了,更多相關JavaScript 微任務和宏任務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JS實現(xiàn)窗口加載時模擬鼠標移動的方法

    JS實現(xiàn)窗口加載時模擬鼠標移動的方法

    這篇文章主要介紹了JS實現(xiàn)窗口加載時模擬鼠標移動的方法,涉及javascript鼠標事件的相關技巧,需要的朋友可以參考下
    2015-06-06
  • JS實現(xiàn)獲取當前URL和來源URL的方法

    JS實現(xiàn)獲取當前URL和來源URL的方法

    這篇文章主要介紹了JS實現(xiàn)獲取當前URL和來源URL的方法,涉及javascript針對頁面document屬性操作的相關技巧,需要的朋友可以參考下
    2016-08-08
  • JS定時器實例詳細分析

    JS定時器實例詳細分析

    在javascritp中,有兩個關于定時器的專用函數(shù),下面講解一下兩個定時器,有需要的朋友可以參考一下
    2013-10-10
  • javascript檢查瀏覽器是否已經(jīng)啟用XX功能

    javascript檢查瀏覽器是否已經(jīng)啟用XX功能

    本文給大家分享的是檢測瀏覽器是否支持cookie功能,檢查瀏覽器是否已經(jīng)啟用Java支持功能以及獲取當前瀏覽器的信息,十分的實用,有需要的小伙伴可以參考下。
    2015-07-07
  • 學習RxJS之JavaScript框架Cycle.js

    學習RxJS之JavaScript框架Cycle.js

    這篇文章主要介紹了學習RxJS之JavaScript框架Cycle.js ,它是一個極簡的JavaScript框架(核心部分加上注釋125行),提供了一種函數(shù)式,響應式的人機交互接口,需要的朋友可以參考下
    2019-06-06
  • 在B/S開發(fā)中經(jīng)常用到的JavaScript技術

    在B/S開發(fā)中經(jīng)常用到的JavaScript技術

    javascript運用中,經(jīng)常用到的代碼,建議每段代碼都要看下,注意本文有三頁,仔細看玩,逐個研究透徹,那么網(wǎng)頁中常見的問題,你也就熟悉掌握了
    2008-05-05
  • 解決window.history.back()返回上一頁有時候需要點擊多次問題

    解決window.history.back()返回上一頁有時候需要點擊多次問題

    這篇文章主要介紹了解決window.history.back()返回上一頁有時候需要點擊多次問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • echarts圖例過多顯示問題解決方案

    echarts圖例過多顯示問題解決方案

    開發(fā)Echarts圖標時經(jīng)常遇到數(shù)據(jù)量過多引起的圖例錯亂,這個時候我們應該如何處理?下面這篇文章主要給大家介紹了關于echarts圖例過多顯示問題的解決方案,需要的朋友可以參考下
    2023-11-11
  • 微信小程序?qū)崿F(xiàn)橫向滾動條

    微信小程序?qū)崿F(xiàn)橫向滾動條

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)橫向滾動條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • functional繼承模式 摘自javascript:the good parts

    functional繼承模式 摘自javascript:the good parts

    javascript:the good parts 書中Inheritance部分講到了一種functional的繼承方式, 具體這個functional該如何翻譯,就不是很清楚了, 就直接意會一下吧
    2011-06-06

最新評論