# 事件机制
js中有同步事件和异步事件,异步事件分为宏任务(setTimeout,ajax,setInterval, I/O,UI交互事件)和微任务(process.nextTick,Promise)
- js运行时会生成执行栈
- 执行栈中的任务会从上到下执行
- 执行栈中任务清空后,检测微任务队列中是否有任务
- 有任务则执行到微任务列表清空
- 再去检测事件队列中是否有宏任务
- 有任务则取出一个宏任务执行
- 再去检测微任务队列中是否有任务
- 有任务则执行到微任务列表清空
- 再去检测事件队列中是否有宏任务
- 有任务则取出一个宏任务执行
- 重复执行以上操作,知道异步任务都执行完返回执行栈继续执行
# 注意点
- 递归调用setTimeout(() =>{}, 0), 不会阻塞主线程
- 递归调用Promise.then, 会阻塞主线程,页面卡死