Eventloop

JS是单线程的,为了防止一个函数执行时间过长阻塞后面的代码,所以会先将同步代码压入执行栈中,依次执行,将异步代码推入异步队列,异步队列又分为宏任务队列和微任务队列,因为宏任务队列的执行时间较长,所以微任务队列要优先于宏任务队列。

常见于读代码写出执行顺序

  1. console.log('script start')
  2. async function async1 () {
  3. console.log('async1 start')
  4. await async2()
  5. console.log('async1 end')
  6. }
  7. async function async2 () {
  8. console.log('async2 end')
  9. }
  10. async1()
  11. setTimeout(() => {
  12. console.log('setTimeout')
  13. }, 0)
  14. new Promise(resolve => {
  15. console.log('Promise')
  16. resolve()
  17. }).then(() => {
  18. console.log('promise2')
  19. })
  20. console.log('script end')

答案:

  1. script start
  2. async1 start
  3. async2 end
  4. Promise
  5. script end
  6. async1 end
  7. promise2
  8. setTimeout

学习资料:
点击查看【bilibili】

JavaScript 运行机制详解:再谈Event Loop
setTimeout+Promise+Async输出顺序?很简单呀!