事件循环、宏任务、微任务

什么是事件循环?

在JS中我们经常会需要“同时”进行多项工作,例如:定时器、事件、异步数据交互等,那么JS是如何管理这些任务的,又是如何确定他们的执行顺序的?

首先,所有的语言都拥有并发模型的概念,也就是说多个任务如何同时执行,大部分语言支持多线程执行,JS拥有所有语言中最简单的并发模型——JS使用单线程的"事件循环(Event Loop)"来处理多个任务的执行

简单来说,js的事件循环,每次读取一个任务,然后执行这个任务,执行完再继续获取下一个,如果暂时没有任务,就暂停执行,等待下一个任务到来;如果在执行任务的过程中有新的任务到达,也不会中断现有任务的执行,而是添加到队列的尾部等待

宏任务  微任务

  • 宏任务(macroTask或简称Task):普通的任务,正常执行
  • 微任务(microTask):优先于宏任务执行(但依然是非抢断的)
  • 宏任务:正常的异步任务都是宏任务,最常见的就是定时器(setInterval, setImmediate, setTimeout)、IO任务

  • 微任务:微任务出现比较晚,queueMicrotask、Promise和async属于微任务

console.log('aaa');  正常第一个输出

setTimeout(()=>console.log('t1'), 0); 宏任务 丢到队列里 第七个执行
(async ()=>{
  console.log(111); 异步,第二个输出
  await console.log(222); 第三个输出
  console.log(333); 收到了等待 所以丢到队列里 又因为是微任务 所以在上面的定时器之前 第五个执行

  setTimeout(()=>console.log('t2'), 0);丢到队列里  最后一个执行
})().then(()=>{
  console.log(444); 回调 所以丢到队列里  第六个执行
});

console.log('bbb'); 第四个执行

aaa

111

222

bbb

333

444

t1

t2

简单来说就是按顺序执行,宏任务丢到最后执行 微任务按顺序执行

1

输出结果 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值