日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

瀏覽器的任務(wù)隊列-宏任務(wù)、微任務(wù)的執(zhí)行順序

作者:小劉踩坑與知識點記錄 更新時間: 2022-08-13 編程語言

重點:

1、首先要清楚常見的宏任務(wù)和微任務(wù)有哪些

宏任務(wù):setTimeout、setInterval、ajax;

微任務(wù):promise、async/await

2、其次要清楚的是??微任務(wù) 執(zhí)行時機(jī)比?宏任務(wù)??早

1、微任務(wù)和宏任務(wù)的執(zhí)行規(guī)則

?此處需要注意的是,當(dāng)所有微任務(wù)執(zhí)行完畢后才會取出一個宏任務(wù)執(zhí)行,宏任務(wù)中存在微任務(wù)的話還是需要將所有微任務(wù)執(zhí)行完在取出一個宏任務(wù)繼續(xù)執(zhí)行。

2、JS運(yùn)行機(jī)制

此處不做過多介紹,主要注意以下幾點:

  1. js是單線程,所謂單線程就是指JS在引擎中只負(fù)責(zé)解釋和執(zhí)行JS代碼的線程只有一個。這點事核心,將來也不會改變。
  2. 同步任務(wù)會在調(diào)用棧中按照順序等待主線程一次執(zhí)行;異步任務(wù)會在異步任務(wù)有了結(jié)果后,將注冊的回調(diào)函數(shù)放在任務(wù)隊列中,等待主線程空閑的時候,被讀取到棧內(nèi)等待主線程的執(zhí)行
  3. Promise本身事同步的立即執(zhí)行函數(shù)他的.then()和catch()方法是異步的(微任務(wù))
  4. async/await是建立在Promise機(jī)制上,當(dāng)調(diào)用一個async函數(shù)時,會返回一個promise對象,而await操作符后面的表達(dá)式就是這個promise,返回值實際上就是peomise的回調(diào)函數(shù)resolve的參數(shù)。
  5. async方法執(zhí)行時,遇到await會立即執(zhí)行表達(dá)式,async表達(dá)式定義的函數(shù)是立即執(zhí)行的await表達(dá)式后面的代碼放在微任務(wù)執(zhí)行,包括賦值。

以下舉幾個例子

async function test1() {
    console.log("test1 begin");
    const result = await test2();
    console.log("result", result);
    console.log("test1 end");
  }
  async function test2() {
    console.log("test2");
  }
  console.log("script begin");
  test1();
  console.log("script end");

控制臺打?。?/p>

?前面注意事項5中說了,async方法執(zhí)行時,遇到await會立即執(zhí)行表達(dá)式,所有第三次輸出應(yīng)該是test2。await后面的代碼將放在微任務(wù)中排隊。

結(jié)果: 1 4 7 5 2 3 6

原文鏈接:https://blog.csdn.net/weixin_46545002/article/details/126285202

欄目分類
最近更新