有一道題是這樣,問這三種分別會出現什麼情況
//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 巨集任務與微任務的執行順序 每乙個巨集任務執行完之後,都會檢查是否存在待執行的微任務,如果有,則執行完所有的微任務之後,再繼續執行下乙個巨...