Event Loop即事件循环,是浏览器解决javaScript单线程运行时不会阻塞的一种机制,也是异步的原理所在。
知识铺垫
Javascript代码运行时,被分为两种任务。分别是宏任务和微任务。Event Loop在处理上述两种任务时,会分别用到Task Queue和MicroTask Queue对宏任务和微任务进行管理,作为队列具有先进先出的特性。
宏任务 (MacroTask/Task)
包含以下几种:
- script操作
- dom操作
- 用户交互操作
- 网络请求
- 定时器相关
setTimeout、setInterval
微任务(MircoTask)
包含以下几种:
Promise中的then、catch、finallywindow中的MutationObserver(用于监听DOM树的改变)Process.nextTick(Node中的方法)
Event Loop循环步骤演示
Javascript Runtime提供对象机制,使其能够与外界交互,是Javascript的执行环境。
运行机制如下:
- 主线程自上而下执行所有代码
- 同步任务进入主线程被执行
- 异步任务进入
Event Table,当异步任务执行到有结果的时候,进入Event Queue - 当前主线程宏任务执行完毕后,从
Event Queue中读取任务,放入主线程 - 重复上述步骤,直至
Task Queue中所有任务执行完毕...
上述步骤就是Event Loop的整个执行步骤。