关于代码执行顺序

224 阅读1分钟

浏览器在执行js代码的过程中会维护一个执行栈,每个方法都会进栈执行之后出栈。

与此同时,又维护了一个消息队列,所有异步方法在执行之后将回调方法传入消息队列。

执行栈中任务执行完再去寻找消息队列中的任务。先进入消息队列的任务先执行

浏览器同时维护了 执行栈消息队列 两条线

执行栈 --(执行完)--> 消息队列(异步方法的回调聚集地)

执行栈中执行 宏任务,当宏任务遇到promise时会创建 微任务

1.执行代码块

2.遇到promise把then中方法放进微任务队列

3.一次宏任务执行完成,检查有无微任务

4.微任务执行

5.下一次宏任务执行

宏任务:

js同步执行的代码块、 setTimeout、 setInterval、 XMLHttpRequest

微任务:

promise、 process、 nextTick

setTimeout(function(){
        console.log(1);
    },0);
    new Promise(function(a,b){
        console.log(2);
        setTimeout(function(){
            a() // 不调用就不走then方法
            console.log(8);
        },0);
        console.log(3);
        setTimeout(function(){
            console.log(4);
        },0);
    }).then(function(){
        console.log(5)
    });
    console.log(6);
    setTimeout(function(){
        console.log(7);
    },0);
    
    // 23618547