理解JavaScript事件循环与任务队列
大约 1 分钟约 373 字...
注意
这里我们讨论的是浏览器的eventloop而不是node环境下的eventloop
event-loop 的执行过程
JS是单线程的,异步要基于回调来实现,eventloop就是异步回调的实现原理
只考虑同步异步:
- 同步代码,一行一行放在
Call Stack
执行 - 遇到异步代码,会先“记录”下,等待时机(定时、网络请求)
- 时机到了,就移动到
Callback Queue
- 如
Call Stack
为空(即同步代码执行完)Event-loop
开始工作 - 轮询查找
Callback Queue
,如有则移动到Call Stack
执行 - 然后继续轮询查找(永动机一样)
宏任务有哪些?微任务有哪些?
- 宏任务:setTimeout, setinterval , Ajax , DOM 事件(浏览器规定的)
- 微任务:Promise(then),async/await(ES6语法规定的)
宏任务、微任务与DOM渲染的关系
宏任务:DOM
渲染前触发
微任务:DOM
渲染后触发
微任务、宏任务和 DOM 渲染,在event loop 的过程
call Stack
清空- 执行当前的微任务
- 尝试
DOM
渲染 - 触发
event-loop
(执行宏任务)

浏览器event-loop
