事件循环(Event Loop)

文章目录


前言

正因为JS是单线程的,所以如果出现多个任务,这些任务的执行顺序是怎么样的呢?这就不得不提一下事件循环

一、同步任务

js中的同步任务是按顺序从上往下依次执行的

   

 这里的1234是依次执行

二、异步任务

当异步任务出现的时候,会先将异步任务存放在任务队列中,当执行完所有的同步任务之后,再去调用任务队列中的异步任务

 js会先将同步任务1提至主线程,然后发现异步任务1和2,则将异步任务1和2依次放入任务队列

同步任务执行完以后会去任务对列看看有没有异步任务 然后执行异步

先执行同步任务1->  再执行同步任务2 ->异步任务

2.微任务与宏任务

异步任务又可以详细的分为两类 就是微任务与宏任务 

I/O、定时器、事件绑定、ajax等都是宏任务

Promise的then、catch、finally和process的nextTick都是微任务

宏任务与微任务的执行顺序是  宏任务执行一个后先看看任务对列有没有微任务 如果有就把微任务执行完再去执行下一个宏任务


 举个栗子

console.log(1) // 同步任务
setTimeout(function() {
  console.log(2) // 异步任务:宏任务
}, 0)
new Promise(function(resolve) {
  console.log(3) // 同步任务
  resolve()
}).then(function() {
  console.log(4) // 异步任务:微任务
})
console.log(5) // 同步任务

答案:1、3、5、4、2

总结

同步任务-->微任务--->宏任务--->微任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值