代码执行顺序

代码执行顺序

1. 代码1

for(var i=0; i<5; i++){ 
    setTimeout(function(){ 
        console.log(i); 
    }, 1000); 
} 
console.log(i)

输出结果:在一秒后输出 5 个5

原因:每次 for 循环的时候 setTimeout 都会执行,但是里面的 function 则不会执行,被放入任务队列。因此放了 5 次;for 循环的 5 次执行完之后不到1000 毫秒;1000 毫秒后全部执行任务队列中的函数,所以就是输出5 个 5。

2. 代码2

setTimeout(function() {
        console.log(1)
    }, 0);
    new Promise(function(resolve, reject) {
        console.log(2);
        resolve();
    }).then(function() {
        console.log(3);
    }).then(function() {
        console.log(4);
    });
    process.nextTick(function() {
        console.log(5)
    });
    console.log(6);

// 输出 2 6 5 3 4 1

这里要注意一点的是,在定义promise的时候,promise构造部分是同步执行的

首先分析 Job queue 的执行顺序:

script(主程序代码)——>process.nextTick——>promise——>setTimeout

(1)主体部分

定义 promise 的构造部分是同步的,因此先输出 2,主体部分再输出 6(同步情况下,就是严格按照定义的先后顺序)

(2)process.nextTick

输出 5

(3)promise

严格的说是 promise.then 部分,输出的是 3和4

(4)setTimeout

最后输出 1

JavaScript 文章被收录于专栏

前端技术分享

全部评论

相关推荐

11-27 17:35
已编辑
蚌埠坦克学院 C++
深信服 后台开发 n×12
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务