let count = 10000;
setTimeout(function(){
console.log('1')
}, 0);
new Promise(function(resolve){
console.log('2');
for(var i=0;i<count;i++){
if(i === 10) {console.log(10)}
i == 9999 && resolve();
}
}).then(function(){
console.log('3')
});
console.log('5');
为什么是先输出3然后才输出1
因为宏任务执行前必须先清空微任务列表,而3是微任务,1是宏任务。另外,微任务的套娃会不断阻碍宏任务的执行,众所周知,定时器的秒数是一个模糊的时间,是指x秒后浏览器空闲时执行,而0秒就更是一个模糊的概念,因为定时器有个最小时间间隔,有的浏览器是2s,有的是4s