微任務和宏任務屬於一個隊列,主要區別在於它們的執行順序(宏任務執行完如果有可執行的微任務則執行完微任務才會繼續執行下一個宏任務)
宏任務:包括整體代碼script,,setInterval,setImmediate。
微任務:原生Promise(有些實現的promise將then方法放到了宏任務中)、process.nextTick、MutationObserver
例如:
<script> console.log(222) Promise.resolve().then(() => { console.log(11) }) console.log(444) </script> <script> console.log(333) </script>
打印結果是:
解釋:首先script是一個宏任務,兩個script標簽是兩個宏任務,按照事件循環的規則執行順序 第一個宏任務執行完成(222,444)==》執行存在的微任務(11)==》執行第二個宏任務(333)