事件队列是一种数据结构,可以存放要执行的任务。它符合队列"先进先出"的特点。
事件循环中并非只维护着一个队列,事实上是有两个队列:
- 宏任务队列(macrotask queue): ajax、setTimeout、setInterval、DOM监听、UI Rendering等
- 微任务队列(microtask queue): Promise的then回调、Mutation Observer API、queueMicrotask()
事件循环对于两个队列的优先级是怎么样的?
1.main script中的代码优先执行;
2.在执行任何一个宏任务之前(不是队列,是一个宏任务),都会先查看微任务队列中是否有任务需要执行
也就是宏任务执行之前,必须保证宏任务队列是空的;
如果不为空,那么就优先执行微任务队列中的任务(回调);
Promise面试题一
setTimeout(function(){
console.log("setTimeout1");
new Promise(function (resolve){
resolve()
}).then(function(){
new Prom