1.什么是事件循环? JS为单线程,所以任务会放在任务队列中。 有两种任务,同步任务,异步任务。先执行同步,在执行异步。
console.log(1)
setTimeout(() => {
console.log(2)
}, 0)
Promise.resolve()
.then(() => {
console.log(3)
})
.then(() => {
console.log(4)
})
console.log(5)
输出结果为1,5,3,4,2. 为什么?同步任务: console.log(1) console.log(5),接下来执行promise中的代码,最后settimeout.为什么? 因为取异步队列时候,任务分为宏任务与微任务。 microtask:微任务:优先级高,可以插队,不是先定义先执行。包括:promise的then,observer,MutationObserver.setImmediate macrotask:宏任务,优先级低,先定义的先执行,包括:ajax,setTimeout,setInterval,事件绑定。 因为微任务优先级比较高,所以会先执行微任务,微任务都执行完后,才执行宏任务。