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

来源:互联网 发布:淘宝双11怎么修改价格 编辑:程序博客网 时间:2024/05/20 19:48

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

setTimeout延时为0时:

o2o:

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

n2n:

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

……

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

例题:

    setTimeout(function(){        console.log(a);    },0);    var a = 1;    console.log(b);    var b = 2;    var c = 3;    var d = 4;    var e = 5;    function fx(c){        console.log(c);    }    function fn(e,d){        console.log(d);        setTimeout(function(){            console.log(e);        },10);    }    setTimeout(function(){        console.log(b);    },20);    fn(e,d);    fx(c);

依次输出:

    undefined    4    3    1    5    2

原因:

1、console.log()函数会在setTimeout函数之前执行,并且b在输出之前未被定义所以最先输出undefined;2、之后,会执行fn函数和fx函数,而fn函数内存在console.log函数,那么它将会先输出d的值4;3、然后,在fx函数内也存在console.log函数,同样会先输出c的值3;4、再来比较setTimeout函数时延长短,依次输出1,5,2。
原创粉丝点击