下面代码的输出是什么?
setTimeout(function(){
console.log(1)
}, 0);
new Promise(function (resolve) {
console.log(2);
for (var i = 0; i < 10000; i++) {
i == 9999 && resolve();
}
console.log(3);
}).then(function () {
console.log(4);
});
console.log(5);
本能的以为setTimeout定时为0,可以马上执行回调方法,输出应该是1、2、3、4、5。
在浏览器上执行发现输出的顺序是2、3、5、4、1.
结论:
- setTimeout定时为0也不是同步马上执行,而是异步执行。
-
Promise
函数会同步执行。 - Promise中的resolve执行后,then()不是同步执行,而是异步执行。