javascript的巨集任務及微任務
阿新 • • 發佈:2020-12-26
技術標籤:前端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等。 在同級下只有執行完巨集任務然後在執行微任務。 如果巨集任務裡還有微任就繼續執行巨集任務裡的微任務,如果巨集任務中的微任務中還有巨集任務就在依次進行。 主執行緒任務——>微任務——>巨集任務——>巨集任務裡的微任務——>巨集任務裡的微任務中的巨集任務——>知道任務全部完成。在巨集任務和微任務之間來回迴圈就叫做事件迴圈也叫做事件輪詢。