1. 程式人生 > 其它 >javascript的巨集任務及微任務

javascript的巨集任務及微任務

技術標籤:前端javascriptjs的執行順序

直接上程式碼

console.log('1');
setTimeout(function() {
  console.log('2');
  new Promise(function(resolve) {
    console.log('3');
    resolve();
   }).then(function() {
    console.log('4')
   })
})
new Promise(function(resolve) {
  console.log('5');
  resolve();
}).then(function() {
  console.log('6')
})
​
setTimeout(function() {
  console.log('7');
  new Promise(function(resolve) {
    console.log('8');
   }).then(function() {
    console.log('9')
   })
})
console.log('10');
​
// 1 5 10 6 2 3 4 7 8
今天看了js的執行數序,在網上看到前端友人分享的,自己也學到了一些東西,特此記錄一下,
我們知道js是單執行緒語言,為啥他不能是多執行緒,因為比如在多個執行緒同時操作dom,這個時候以誰為準,這個也是對js為啥不是多執行緒的一個反列。
js是單執行緒,但是在單執行緒中,我們是知道一個接一個去執行,當前一個任務執行完之後才能執行下一個任務,所以我們將任務分為同步任務和非同步任務。
只有在同步任務執行完之後再去看任務佇列中去執行非同步的任務。
非同步任務又細分巨集任務和微任務
巨集任務常見的有setTimeout和setInterval,微任務常見的有promise.then.catch,process.nextTick等。
在同級下只有執行完巨集任務然後在執行微任務。
如果巨集任務裡還有微任就繼續執行巨集任務裡的微任務,如果巨集任務中的微任務中還有巨集任務就在依次進行。
主執行緒任務——>微任務——>巨集任務——>巨集任務裡的微任務——>巨集任務裡的微任務中的巨集任務——>知道任務全部完成。在巨集任務和微任務之間來回迴圈就叫做事件迴圈也叫做事件輪詢。