js运行机制----Event Loop 事件循环机制

先出一条题,测试一下自己是否做对了,做对就说明你理解了,做错了就继续看下去吧。

// 执行一个宏任务
async function async1() {
      console.log( 'async1 start');
      await async2();  // 执行完 async2() 后,遇到微任务await,(await后面的代码)放入微任务队列
      console.log( 'async1 end');
 }
 async function async2() {
      console.log( 'async2');
 }
 console.log( 'script start');//同步任务
 setTimeout(function() {    // 遇到异步宏任务,放入宏任务队列
      console.log( 'setTimeout');
 }, 0)
 async1();
 new Promise (function ( resolve ) {
      console.log( 'promise1');//同步任务
      resolve();    // 遇到微任务,放入微任务队列
 }).then(function() {
      console.log( 'promise2');//异步微观任务
 })
 console.log( 'script end');

// 打印内容顺序如下:
script start
async1 start
async2
promise1
script end
async1 end
promise2
setTimeout

解答:

  1. js有分同步任务和异步任务,其中异步任务包括微观任务和宏观任务。
  2. 执行顺序:同步–>异步微观–>异步宏观
  3. 同步宏观:script(整体代码)、new promise
  4. 异步宏观任务的方法有:、setTimeout、setInterval、
  5. 微观任务的方法有:Promise.then、MutaionObserver、process.nextTick(Node.js 环境),async/await。
  6. 整体是个宏观任务,先一步一步执行同步任务,执行完同步任务之后就会查看异步任务事件队列,并将其中的微观任务依次执行完,形成循环,等微观任务执行完,最后才执行异步中的宏观任务。
  7. 注意:new promise是同步任务,只有promise.then中的才是异步微观任务,asyns/await–>await后面的代码又会形成一个微观任务放进队列中。
  8. 看到这里你再回头看看前面那道题,结合注释看,你是否懂了呢
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值