下面代碼的輸出是什么?
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定時(shí)為0,可以馬上執(zhí)行回調(diào)方法,輸出應(yīng)該是1、2、3、4、5。
在瀏覽器上執(zhí)行發(fā)現(xiàn)輸出的順序是2、3、5、4、1.
結(jié)論:
- setTimeout定時(shí)為0也不是同步馬上執(zhí)行,而是異步執(zhí)行。
-
Promise函數(shù)會(huì)同步執(zhí)行。 - Promise中的resolve執(zhí)行后,then()不是同步執(zhí)行,而是異步執(zhí)行。