事件分为 同步 和 异步
同步任务在执行过程中会有一个执行栈
1. 执行主宏任务,即为 主线程的同步任务 ,遇到异步任务,先放入event loop 事件队列当中, 微任务优先,因为主任务也属于宏任务。
2. 执行完所有的同步任务之后 进入 event loop当中
异步任务 分为宏任务(macro-task)、微任务(micro-task)
macro-task 常用: setTimeout setImmediate
micro-task 常用:promise
3. 先执行 microtasks queues 微任务队列 全部执行完之后 清空 microtasks queues 进入 macrotasks queues 将宏任务取出一个 放入执行栈执行完成,就算一次循环结束。然后再进入 microtasks queues 里执行微任务, 依次循环
简而言之: 在栈的同步任务执行结束后,查找异步任务, microtasks queues 清空后 执行 宏任务, 再执行 microtasks queues 如此循环。 (嵌套时,会出现)
2020-05-16 补充
异步任务 es6的promise es7的async await 解决回调地狱的问题。