Event loop微任务宏任务

首先,JavaScript是一个单线程的脚本语言。
所以就是说在一行代码执行的过程中,必然不会存在同时执行的另一行代码,就像使用alert()以后进行疯狂console.log,如果没有关闭弹框,控制台是不会显示出一条log信息的。
亦或者有些代码执行了大量计算,比方说在前端暴力破解密码之类的鬼操作,这就会导致后续代码一直在等待,页面处于假死状态,因为前边的代码并没有执行完。

1. 微任务、宏任务

宏任务(macrotask)

  • 异步 Ajax 请求
  • setTimeout、setInterval
  • 文件操作
  • 其它宏任务

微任务(microtask)

  • Promise.then、.catch 和 .finally
  • process.nextTick
  • 其它微任务

两个任务皆为 异步任务,区别就是执行顺序。消息队列 有微先走微,微可插宏队

2. 执行具体步骤顺序 

先执行同步代码,遇到异步宏任务则将异步宏任务放入宏任务队列中
遇到异步微任务则将异步微任务放入微任务队列中
当所有同步代码执行完毕后,再将异步微任务从队列中调入主线程执行
微任务执行完毕后再将异步宏任务从队列中调入主线程执行,一直循环直至所有任务执行完毕。

3.面试题:请分析以下代码输出的顺序(代码较长,截取成了左中右 3 个部分)

正确的输出顺序是:156234789  

猜你喜欢

转载自blog.csdn.net/qq_37485170/article/details/130111693