早年曾写了一篇事件循环的学习笔记,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'

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

被折叠的 条评论
为什么被折叠?



