宏任务和微任务
宏任务:
- setTimeout
 - setInterval
 - setImmediate
 - requestAnimationFrame
 - I/O
 - UI rendering
 
微任务:
- process.nextTick
 - Promises
 - queueMicrotask
 - MutationObserver
 
事件循环算法(尽管与 规范 相比仍然是简化过的):
- 从 
宏任务队列中出队并执行最早的任务。 - 执行所有 
微任务:- 当微任务队列非空时:
 - 出队并执行最早的微任务。
 
 - 如果有变更,则将变更渲染出来。
 - 如果宏任务队列为空,则休眠直到出现宏任务。
 - 转到步骤 1。