setTimeout与console.log、promise.then之间执行先后顺序

1、setTimeout与console.log、promise.then、await之间执行先后顺序

(1)setTimeout延时为0时: 

 setTimeout(function(){
        console.log(2);
    },0);
    console.log(1);
    //输出顺序:1,2

(2)先后顺序:函数调用栈  ——>setTimeout操作(按时延长短)

setTimeout定义的操作,都将放在同一个队列中依次执行。而这个队列的执行时间需要等到函数调用栈执行完毕后才会执行,也就是等待所有的可执行代码执行完毕,才会轮到setTimeout执行其内部操作,并且按照其时延时间长短顺序执行代码!

    setTimeout(function(){          //依次输出:undefined 4 3 1 5 2
        console.log(a);             //第四个:1     
    },0);
    var a = 1;
    console.log(b);                 //第一个:undefined
    var b = 2;
    var c = 3;
    var d = 4;
    var e = 5;
    function fx(c){
        console.log(c);            //第三个:3
    }
    function fn(e,d){
        console.log(d);            //第二个:4
        setTimeout(function(){
            console.log(e);        //第五个:5
        },10);
    }
    setTimeout(function(){
        console.log(b);            //第六个:2
    },20);
    fn(e,d);
    fx(c);

(3)关于setTimeout和Promise执行顺序问题 (参考博客:http://www.cnblogs.com/sunmarvell/p/9564815.html

执行顺序:Promise——>其后的.then()——>setTimeout(异步)

console.log('打印'+1);                         //第一个:打印1
setTimeout(function(){                      
    console.log('打印'+2);                     //第六个:打印2 
})
new Promise(function(resolve,reject){
        console.log('打印'+3);                //第二个:打印3
      }).then(                    
  console.log('打印'+4));                     //第三个:打印4                        
console.log('打印'+10);                       //第四个:打印10
new Promise(function(resolve,reject){
      setTimeout(function () {
        console.log('打印'+5);                //第七个:打印5
      });
  }).then(
  console.log('打印'+6));                    //第五个:打印6
setTimeout(function(){
    new Promise(function(resolve,reject){
        console.log('打印'+7);                //第七个:打印7
      });
})

导图要表达的内容用文字来表述的话:

  • 同步和异步任务分别进入不同的执行"场所",同步的进入主线程,异步的进入Event Table并注册函数。
  • 当指定的事情完成时,Event Table会将这个函数移入Event Queue。
  • 主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。
  • 上述过程会不断重复,也就是常说的Event Loop(事件循环)。

猜你喜欢

转载自blog.csdn.net/Judy_qiudie/article/details/82768243