Js运行机制

Js运行机制(单线程)

    运行栈          任务队列                  事件循环 轮询执行任务队列
-------------    --------------------|    同步    |    |    异步     |-------------    ---------------------
微任务:promise.then
宏任务:计时器 ajax 读取文件
执行顺序
 1. 同步
 2. process.nextTick
 3. 微任务
 4. 宏任务/setImmediate

 - 首先同步代码会放到 运行栈执行
 - 之后异步的代码比如计时器,到了时间 会放入到任务队列中,事件循环会每隔一段时间,轮询运行任务队列的代码.
(计时器的时间不准的原因,他需要同步的代码执行之后,然后在靠事件循环机制运行)
 - setImmediate 触发的机制是 当前事件循环结束.
(测试了一下 setTimeout 0毫秒和1毫秒时 setImmediate后触发
setTimeout 大于1毫秒时 setImmediate先触发)

附带一道题

console.log('同步1')
process.nextTick(()=>{
    console.log('nextTick');
})
setTimeout(()=>{
    console.log('异步1');
},0)
setTimeout(()=>{
    console.log('异步2');
},10)
    async()
    console.log('同步2');
setImmediate(()=>{
    console.log('setImmediate');
})
new Promise((resolve)=>{
    // new Promise时 是同步代码
    console.log('Promise');
    resolve()
}).then(()=>{
    console.log('Promise.then',);
}).then(()=>{
    console.log('Promise.then2',);
})
new Promise((resolve)=>{
    // new Promise时 是同步代码
    console.log('Promise2');
    resolve()
}).then(()=>{
    console.log('Promise.then3',);
}).then(()=>{
    console.log('Promise.then4',);
})
async function async() {
    console.log('await前',);
    await async2()
    // await后面的属于微任务
    console.log('async')
    console.log('await后')
}
console.log('同步3')
async function async2() {
    console.log('async2')
}

答案分割线
同步1
await前
async2
同步2
Promise
Promise2
同步3
nextTick
async
await后
Promise.then
Promise.then3
Promise.then2
Promise.then4
异步1
setImmediate
异步2

如果🈶️小伙伴喜欢,要一键三连哦~~~ (´๑•_•๑)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值