javascript执行:(Promise里的代码为什么比setTimeout先执行)
我们把宿主发起的任务称为宏观任务, 把javascript引擎发起的任务称为微观任务👀
1
2
3
4
5
6
7
| var r = new Promise(function(resolve, reject){
console.log("a");
resolve()
});
setTimeout(()=>console.log("d"), 0)
r.then(() => console.log("c"));
console.log("b")
|
以上执行结果可自行尝试运行(abcd😝),d 必定发生在 c 之后,因为 Promise 产生的是javascript引擎内部的微任务,而setTimeout是浏览器的API,它产生宏任务
,微任务始终先于宏任务 (微观任务不执行完成不会进行宏观任务)
1
2
3
4
5
6
7
8
9
10
11
12
| setTimeout(()=>console.log("d"), 0)
var r1 = new Promise(function(resolve, reject){
resolve()
});
r.then(() => {
var begin = Date.now();
while(Date.now() - begin < 1000);
console.log("c1")
new Promise(function(resolve, reject){
resolve()
}).then(() => console.log("c2"))
});
|
javascript的闭包和执行上下文
javascript