1、JS用来存储待执行的回调函数的队列包含2个不同特定的队列
- 宏队列
用来保存待执行的宏任务,例如:dom事件回调、ajax回调、定时器回调 - 微队列
用来保存待执行的微任务,例如:promis回调、mutation回调(改变观察者)
2、JS执行时会区别这两个队列
- JS引擎首先必须执行所有的初始化同步代码
- 每次准备取出第一个宏任务执行前,都要将所有的微任务一个一个取出来执行(包含在宏任务中的微任务:在执行到宏任务时先将其中的微任务添加到微任务队列,在执行下一个宏任务时先将这个添加的微任务执行完成,再执行宏任务)
总结:js代码执行顺序,先将所有的同步任务完成,完成后执行添加到异步队列中的异步任务。如果存在微任务的话执行所有的微任务,等待所有的微任务执行完成,再去执行异步队列中的宏任务