event loop 与 宏任务 与 微任务
浏览器运行有两种模式,同步模式与异步模式
异步模式分为:宏任务与微任务
- 浏览器的宏任务:宏任务中可能会执行的代码包括“脚本 (script)”“模块(module)”和“函数体(function body)”
- 函数体其实也是一个语句的列表,函数体中的语句列表中多了 return 语句可以用
- 宏任务Task,由浏览器或 Node 发起,包括:setTimeout, setInterval, MessageChannel, I/O 事件队列,setImmediate(Node 环境), Script 整体代码块
- 微任务 Jobs,有 JS 自身发起,包括:requestAnimationFrame,
MutationObserver(浏览器环境), Promise.[then, catch, finally], process.nextTick(Node 环境), queueMicrotask - requestAnimationFrame 会在下一次重绘之前执行
- 假设有两个代码块:执行第一个代码块的同步代码,创建并排入了微任务、宏任务队列---->同步代码执行完成----->清空其微任务队列
nodeJS 事件循环---来自 libuv
- 事件驱动的异步 IO模型而设计:
- timers
- pending callbacks
- idle, prepare
- poll
- check
- close callbacks