關於巨集任務和微任務的一道題

2021-10-06 04:43:28 字數 521 閱讀 2921

有一道題是這樣,問這三種分別會出現什麼情況

//1.

var i=0;

function fn()

fn()

//2.

var i=0;

function fn()

fn()

//3.

var i=0;

function fn()).then(fn)

}fn()

首先是第一種,它是同步任務,沒有終止條件,所以會一直建立函式上下文進棧,所以會導致棧溢位。

第二種則是把它分成許多個巨集任務,如果巨集任務中含有巨集任務,則會把它插到任務佇列的後面,等下一次執行任務佇列的時候再來執行,而這次巨集任務執行完便會從佇列中移除掉,所以不會阻塞。

第三個會造成頁面卡死,雖然不會棧溢位。因為它會不停的建立和銷毀微任務,當執行完當前的微任務時,它的then又建立了乙個微任務,我們知道微任務裡面如果還含有微任務,則會繼續執行後面的微任務,所以它會一直建立銷毀。導致任務佇列裡面的其他任務無法執行,最後卡死。

巨集任務和微任務

概念 1.巨集任務 當前呼叫棧中執行的 成為巨集任務。主 快,定時器等等 3.巨集任務中的事件放在callback queue中,由事件觸發執行緒維護 微任務的事件放在微任務佇列中,由js引擎執行緒維護。執行機制02 1.在執行棧中執行乙個巨集任務。2.執行過程中遇到微任務,將微任務新增到微任務佇列...

巨集任務和微任務

1.巨集任務 分類 settimeout setinterval requrestanimationframe 1 巨集任務所處的佇列就是巨集任務佇列 2 第乙個巨集任務列中只有乙個任務,執行主線程的js 3 巨集任務佇列可以有多個 2.微任務 分類 new promise then process...

巨集任務和微任務

什麼是巨集任務和微任務 j ascript把非同步任務又做了進一步的劃分,非同步任務又分為兩類,分別是 巨集任務 macrotask 微任務 microtask 巨集任務與微任務的執行順序 每乙個巨集任務執行完之後,都會檢查是否存在待執行的微任務,如果有,則執行完所有的微任務之後,再繼續執行下乙個巨...