[005]JS专研系列 | 宏任务&微任务面试题

目录

1、概念

2、面试题

2.1

2.2

2.3

2.4

3、资源福利


1、概念

  1. 宏任务:DOM事件回调、Ajax回调、定时器回调
  2. 微任务:Promise回调、Mutation回调
  3. 宏任务需要在所有微任务执行完之后再去执行

顺序:同步队列=>微任务=>宏任务

2、面试题

2.1

setTimeout(()=>{
    console.log(1)
})
Promise.resolve().then(()=>{
    console.log(2)
})
Promise.resolve().then(()=>{
    console.log(4)
})
console.log(3)  //3 2 4 1

2.2

setTimeout(() => {
    console.log(1)
})
new Promise((resolve) => {
    console.log(3)
    resolve()
}).then(() => {
    console.log(2)
}).then(() => {
    console.log(4)
})
console.log(5) // 3 5 2 4 1

2.3

const first = () => new Promise((resolve, reject) => {
    console.log(3)
    let p = new Promise((resolve, reject) => {
        console.log(7)
        setTimeout(() => {
            console.log(5)
            resolve(6)
        })
        resolve(1)
    })
    resolve(2)
    p.then((arg) => {
        console.log(arg)
    })
})

first().then((arg) => {
    console.log(arg)
})
console.log(4) // 3 7  4 1 2 5

// 关键点:由于p之前已经resolve(1),再resolve(3)无效

2.4

setTimeout(()=>{
    console.log("0")
})
new Promise((resolve,reject)=>{
    console.log("1")
    resolve();
}).then(()=>{
    console.log("2")
    new Promise((resolve,reject)=>{
        console.log("3")
        resolve()
    }).then(()=>{
        console.log("4")
    }).then(()=>{
        console.log("5")
    })
}).then(()=>{
    console.log("6")
})

new Promise((resolve,reject)=>{
    console.log("7")
    resolve()
}).then(()=>{
    console.log("8")
}) // 1 7 2 3 8 4 6 5 0

// 关键点:每次.then() 都会new Promise()

3、资源福利

  1. 《手写Promise》
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值