目录
示例-1
- 示例-1
- 示例-2
- 示例-3
setTimeout(() => { console.log(1); }, 20); console.log(2); setTimeout(() => { console.log(3); }, 10); console.log(4); // console.time('time'); for (let i = 0; i < 90000000; i++) { // 900000 5 个 0:2.57421875 ms 左右 // 9000000 6 个 0:12.625 ms 左右 // 90000000 7 个 0:116.13525390625 ms 左右 // 900000000 8 个 0:525.622314453125 ms 左右 // 9000000000 9 个 0:9807.490966796875 ms 左右 // 90000000000 10 个 0:循环不出来了 } // console.timeEnd('time'); console.log(5); setTimeout(() => { console.log(6); }, 8); console.log(7); setTimeout(() => { console.log(8); }, 15); console.log(9); // 2 4 5 7 9 3 1 6 8
循环的时间都超过了所有定时器的时间,在宏仁务中,定时器会按照从上到下的顺序执行,不再按照设置的时间长短来执行。
示例-2console.log(1); setTimeout(()=>{ console.log(2); }, 50); console.log(3); setTimeout(()=>{ console.log(4); while(1 === 1) {}; // 遇到死循环, // 所有代码执行都是在主栈中执行, // 主栈永远结束不了, // 后面啥都不干 }, 0); console.log(5); // 1 3 5 4示例-3
console.log(1); // 宏仁务 setTimeout(function () { console.log(2); }, 0); // 微任务 Promise.resolve().then(function () { console.log(3); }).then(function () { console.log(4); }); console.log(5); // 1 5 3 4 2