async function async1 ()
async function async2 ()
console.log('script start')
settimeout(function () , 0)
async1();
new promise (function (resolve) ).then (function () )
console.log('script end')
執行結果:
script start
async1 start
async2
promise1
script end
promise2
async1 end
settimeout
首先,要理解巨集任務佇列和微任務佇列,巨集任務是**執行的主線,本來只有一條巨集任務線,但如果遇到 settimeout 之類的就會新建乙個巨集任務線,然後每個巨集任務裡面會有乙個微任務佇列,巨集任務在執行過程中如果遇到promise.then()之類的微任務,就會推到當前巨集任務的微任務佇列當中,在本輪巨集任務的同步**執行完之後,依次執行微任務
首先執行列印script start
然後來到了settimeout, 新建一條巨集任務,排在第一條巨集任務後面
執行async1,列印async1 start
執行await async2 , 從右往左執行,執行async2,列印async2, 返回promise物件,
await會阻塞async1後面的**執行,所以跳出來
執行new promise 列印promise1, 把then 裡面的函式加入微任務佇列
列印script end
把async1 await中返回的promise的then 方法加入微佇列, 執行await後面的**需要then 方法的執行,所以這個時候算是巨集任務都執行完了,因為卡在那不動了,開始執行微任務
執行微佇列,列印promise2, 執行第二個微任務,啥也沒列印
then()方法引數裡拿到結果以後,async2 await算是執行結束了,後面的**不再被阻塞
列印 await後面的async1 end
來到第二條巨集任務線,列印settimeout
總結一下列印順序:
script start
async1 start
async2
promise1
script end
promise2
async1 end
settimeout
今日頭條 今日頭條三面面經
一面 1 演算法題,程式設計實現nsum 2 實現元素的居中並且寬高比為3 4 3 實現繼承 4 給了一段 給出輸出結果,這個是和非同步相關 5 http的狀態碼有哪些 6 cookie和session的區別,以及如何生成session 7 給 寫輸出和原型鏈相關 8 變數宣告提公升 三面 1 介紹...
今日頭條筆試
問題描述 給定乙個段落,由 n 個句子組成。第 i 個句子的長度為 l i 包含的單詞個數為 w i 句子不包含任何除字母和空格 外的符號。每個句子內部,含有若干個單詞,由空格 分隔。句子不會包含連續的空格。隨後給定 m 個查詢,每個查詢包含乙個句子,需要在段落中尋找相同單詞數量最多的句子。重複的單...
今日頭條emmmmmmm
迭代器的用處就是重複的運作一道一百,像乙個家庭爺爺生了爸爸才能有孫子。這個迭代器級別非常關鍵斷了乙個也不行!迭代器 只要 iter 方法的物件就是迭代物件 字串,列表,元祖,字典,集合,檔案都可迭代物件!next 其實是在遍歷可迭代物件的元素,一遍完成報錯。迭代器 是擁有 iter 方法,迭代物件擁...