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