javascript小记

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