//难点:
// 事件循环
// 宏任务先执行 然后微任务再执行
// 先执行同步任务 然后执行宏任务 宏任务内部的同步任务 内部的微任务(开启下一轮的宏任务) 开启下一轮的宏任务
//一个宏任务执行完毕 检索下一轮宏任务
//脚本,计时器是宏任务
//then的执行体 then(()=>{})
//当异步(宏任务 微任务)执行完毕以后 就会回到回调函数 执行js线程的任务
//同步的代码先执行 异步的回调函数后执行 异步的回调函数想同时运行时 就看优先级
//先添加到队列的先运行
列题:
setTimeout(() => {
console.log(0);
});
new Promise(resolve => {
console.log(1);
setTimeout(() => {
resolve();
Promise.resolve().then(() => console.log(2));
console.log(3);
});
Promise.resolve().then(() => console.log(4));
}).then(() => {
console.log(5);
Promise.resolve().then(() => console.log(8));
setTimeout(() => console.log(6));
});
console.log(7);
//分析首先执行同步任务new Promise 和 找到内部的同步任务 console.log(1) 和 console.log(7)
//但执行同步任务的时候找到Promise.resolve().then(() => console.log(4));
和then(() => {
console.log(5);
Promise.resolve().then(() => console.log(8));
setTimeout(() => console.log(6)); 两个微任务 第一阶段完成
然后同步任务做完,执行同步任务的微任务 Promise.resolve().then(() => console.log(4));输出4
但是下一个微任务的resolve();在宏任务中,所以要等执行那个宏任务的时候才执行
开始执行宏任务,找到第一个宏任务
setTimeout(() => {
console.log(0);
});
输出0 ,在找到下一个宏任务
setTimeout(() => {
resolve();
Promise.resolve().then(() => console.log(2));
console.log(3);
});
由于resolve();
然后输出同步任务console.log(3);输出三
然后执行reselove输出上轮的微任务输出5
然后执行两个微任务,由于js排队,所以谁先排队谁先输出 分别输出2 8
最后执行最后一个宏任务输出6
所以最后结果是1 7 4 0 3 5 2 8 6
//
//