
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