先来看一段代码,输出顺序是什么呢?
  setTimeout(function(){
    console.log('set1')
    new Promise(function(resolve){
      resolve();
    }).then(function(){
      new Promise(function(resolve){
        resolve()
      }).then(function(){
        console.log('then4')
      });
      console.log('then2')
    })
  })
  new Promise(function(resolve){
    console.log('pr1');
    resolve();
  }).then(function(){
    console.log('then1')
  })
  setTimeout(function(){
    console.log('set2');
  })
  console.log(2)
答案如下:
微信截图_20200417171024.png
微信截图_20200417171133.png
先执行同步代码,当检测到有异步代码时,放到异步队列里等待执行。执行完同步代码时,去看异步队列里是否有需要执行的代码段,先执行里面的微任务,再执行里面的宏任务。两者区分如下:
微信截图_20200417171255.png











网友评论