Eventloop
JS是单线程的,为了防止一个函数执行时间过长阻塞后面的代码,所以会先将同步代码压入执行栈中,依次执行,将异步代码推入异步队列,异步队列又分为宏任务队列和微任务队列,因为宏任务队列的执行时间较长,所以微任务队列要优先于宏任务队列。
常见于读代码写出执行顺序
console.log('script start')async function async1 () {console.log('async1 start')await async2()console.log('async1 end')}async function async2 () {console.log('async2 end')}async1()setTimeout(() => {console.log('setTimeout')}, 0)new Promise(resolve => {console.log('Promise')resolve()}).then(() => {console.log('promise2')})console.log('script end')
答案:
script startasync1 startasync2 endPromisescript endasync1 endpromise2setTimeout
学习资料:
点击查看【bilibili】
JavaScript 运行机制详解:再谈Event Loop
setTimeout+Promise+Async输出顺序?很简单呀!
