代码执行顺序
代码执行顺序
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 文章被收录于专栏
前端技术分享
查看9道真题和解析
