1. 程式人生 > >js 巨集任務,微任務

js 巨集任務,微任務

   在瞭解async之後,發現一個自己不是很熟悉的點兒,在這兒記錄一下

    js 中存在巨集任務和微任務,js 的執行順序是 一個巨集任務執行結束之後才會去執行下一個巨集任務,微任務是在本巨集任務的主要的任務結束之後,再去執行微任務,當所有的微任務結束之後,這個巨集任務也就算執行結束了,值的注意的是,script 就是一個大的巨集任務
   先分類:
       巨集任務  srcipt > setImmediate  > messageChannel > setTimeout/setInterval
       微任務  promise相關的  reslove 裡邊的    

   舉例說明
      <script>

            console.log("1")
            setTimeout(function() {console.log('2')}, 0)
            new Promise(function (resolve) {
                console.log('3')
                resolve() 
            }).then( function() {
                console.log('4')

            })

            console.log('5')

      </script>

       結果會是   1  3  5  4   2 

      因為script 和 setTimeout 都是巨集任務,所以setTimeout 會在script 結束之後執行,所以 2 的最後的
      then 是微任務,要等巨集任務的主線任務結束之後執行,所以會 是先3 ,然後跳出 執行 5, 5完成之後,巨集任務的主線完成
      開始執行微任務  then , 列印  4 ,之後,巨集任務結束,開始執行另一個巨集任務,也就是 setTimeout , 列印 2