代码执行顺序
代码执行顺序
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 文章被收录于专栏
前端技术分享