第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

熱點(diǎn)面試題:瀏覽器和Node的宏任務(wù)和微任務(wù)

標(biāo)簽:
Node.js JavaScript 面試

前言

极度投入,深度沉浸,边界清晰

前端小菜鸡一枚,分享的文章纯属个人见解,若有不正确或可待讨论点可随意评论,与各位同学一起学习~

热点面试题:浏览器和Node的宏任务和微任务

浏览器中的宏任务和微任务?

  • 宏任务:script中的代码,setTimeout, setInterval, I/O, UI render
  • 微任务:promise(async/await), Object.observe, MutationObserver

Node 中的宏任务和微任务?

  • 宏任务:setTimeout,setInterval,setImmediate,script 整体代码, I/O 操作
  • 微任务:process.nextTick,new Promise().then()

浏览器与Node中的宏任务和微任务的区别是什么?

  • node 环境下的 setTimeout 会依次执行,而浏览器是一个一个分开的
  • 浏览器端:在每执行一次宏任务前,会将微任务队列全部清空

案例

// eg1:
console.log(1);

setTimeout(() => console.log(2));

Promise.resolve().then(() => console.log(3));

Promise.resolve().then(() => setTimeout(() => console.log(4)));

Promise.resolve().then(() => console.log(5));

setTimeout(() => console.log(6));

console.log(7);

// 同步任务:
    // console.log(1);
    // console.log(7);
// 宏任务:
    // setTimeout(() => console.log(2));
    // setTimeout(() => console.log(6));
    // setTimeout(() => console.log(4)))
// 微任务:
    // Promise.resolve().then(() => console.log(3));
    // Promise.resolve().then(() => setTimeout(() => console.log(4)));
    // Promise.resolve().then(() => console.log(5));

/**
 * 结果:1 7 3 5 2 6 4
 * 解析:
 * 第一轮开始:
 *  1. 同步任务 console.log(1); => 1
 *  2. 遇到宏任务,加入宏任务队列
 *  3. 遇到微任务,加入微任务队列
 *  4. 遇到微任务,加入微任务队列
 *  5. 遇到微任务,加入微任务队列
 *  6. 遇到宏任务,加入宏任务队列
 *  7. 同步任务 console.log(7); => 7
    宏任务:
        setTimeout(() => console.log(2));
        setTimeout(() => console.log(6));
    微任务:
        Promise.resolve().then(() => console.log(3));
        Promise.resolve().then(() => setTimeout(() => console.log(4)));
        Promise.resolve().then(() => console.log(5));
 * 第一轮结果: 1 7


 * 第二轮开始:
 *  1. 执行微任务,取出队列中的第一项:console.log(3)); => 3
 *  2. 执行微任务,取出队列中的第二项,此时遇到宏任务 setTimeout(() => console.log(4)) 加入到宏任务队列
 *  3. 执行微任务,取出队列中的第三项:console.log(5)); => 5
 *  4. 此时微任务队列为空,执行宏任务队列第一项:setTimeout(() => console.log(2)); => 2
 *  5. 此时微任务队列为空,执行宏任务队列第二项:setTimeout(() => console.log(6)); => 6
 *  6. 此时微任务队列为空,执行宏任务队列第三项:setTimeout(() => console.log(4)); => 4
 *  7. 此时所有任务执行完,返回结果
    宏任务:
        setTimeout(() => console.log(2));
        setTimeout(() => console.log(6));
        setTimeout(() => console.log(4));
    微任务:
        empty
 * 第二轮结果:1 7 3 5 2 6 4

    最终结果:1 7 3 5 2 6 4
 */




// eg2:
setImmediate(function A() {
    console.log(10);
    setImmediate(function B() {
        console.log(11);
    });
});

console.log(1);

setTimeout(() => console.log(2));

Promise.resolve().then(() => console.log(3));

Promise.resolve().then(() => setTimeout(() => console.log(4)));

Promise.resolve().then(() => console.log(5));

setTimeout(() => console.log(6));

process.nextTick(function A() {
    console.log(8);
    process.nextTick(function B() {
        console.log(9);
    });
});

console.log(7);

/**
 * 过程省略.....
 */
// 1 7 8 9 3 5 2 6 4 10 11

文章特殊字符描述:

  1. 问题标注 Q:(question)
  2. 答案标注 R:(result)
  3. 注意事项标准:A:(attention matters)
  4. 详情描述标注:D:(detail info)
  5. 总结标注:S:(summary)
  6. 分析标注:Ana:(analysis)
  7. 提示标注:T:(tips)
點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
Web前端工程師
手記
粉絲
6
獲贊與收藏
41

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消