任务队列
所有的任务可以分为同步任务和异步任务
- 同步任务都在主线程上执行,形成一个执行栈,前一个任务执行完毕后才能执行后一个任务
- 异步任务由js委托给宿主(Node、浏览器)进行执行,已完成的异步任务的回调函数会被加入到任务队列中等待执行
- js的主线程执行栈被清空后,会读取任务队列中的回调函数,依次执行
- js主线程不断重复以上几步
宏任务和微任务
js的异步任务又分为宏任务和微任务,两种队列在同一时刻都只执行一个任务
宏任务队列
- js整体代码
- 异步请求
- setTimeout,setInterval
- 文件I/O操作
- 其他
微任务
- Promise的then、catch和 finally
- process.nextTick(node独有)
- 其他
运行机制
宏任务-->微任务-->宏任务-->微任务
先执行宏任务,执行完后看微任务队列是否有微任务,没有微任务浏览器渲染后执行下一个宏任务
有微任务将所有微任务执行,执行完微任务,浏览器渲染后执行下一个宏任务