JS的事件循环理解

本文探讨了JavaScript的事件循环,解释了为何需要事件循环来处理单线程中的同步和异步任务。文章介绍了宏任务和微任务的概念,以及它们在事件循环中的执行顺序。还讨论了async和await如何影响任务调度,并通过实例解析了它们的工作原理。最后,提出了一个小挑战以加深读者对事件循环的理解。
摘要由CSDN通过智能技术生成

早年曾写了一篇事件循环的学习笔记,Jake Archibald: In The Loop【事件循环学习笔记】,不过这个以视屏学习为主流程,今天再写一篇,对事件循环做个补充.

一. 为什么需要事件循环

因为js是一门单线程语言,但是我们因为需要调用接口或者进行其他需要延时的操作,如果是单线程,就会阻塞整个进程.所以实现单线程非阻塞的方法就是事件循环.

在JS中任务大致分为两种:

  • 同步任务:可以立即执行,同步任务一般会直接进入到主线程中执行.
    注意: new Promise 是同步任务,可以进入主线程
  • 异步任务:异步进行的任务,例如setTimeout等等

二.宏任务和微任务

异步任务也分为两种:

  • 微任务:一个需要异步执行的函数,执行时机是在主函数执行结束之后、当前宏任务结束之前
    常见微任务:promise.then,process.nextTick,MutaionObserver

  • 宏任务:时间粒度比较大,执行的时间间隔是不能精确控制的,对一些高实时性的需求就不太符合
    常见宏任务: script(外层同步代码);setTimeout/setIntervel;setImmediate;UI rendering

事件循环,宏任务,微任务的关系在另一篇文章写了,就不再重复

看一个例子:

console.log(1)
setTimeout(()=>{
   
    console.log(2)
}, 0)
new Promise((resolve, reject)=>{
   
    console.log('new Promise'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值