接昨天代码输出题目,前端面试题之代码输出前端面试题之代码输出
异步&事件循环
3.代码输出结果
const promise = new Promise((resolve, reject) => {
console.log(1);
setTimeout(() => {
console.log("timerStart");
resolve("success");
console.log("timerEnd");
}, 0);
console.log(2);
});
promise.then((res) => {
console.log(res);
});
console.log(4);输出结果如下:
1
2
4
timerStart
timerEnd
success代码执行顺序如下:
- 首先遇到
new Promise,打印 1; - 遇到
setTimout,宏任务,放到宏任务队列; - 继续向下执行,打印 2;
- 由于
Promise的状态是pending,跳过promise.then,打印4; - 微任务队列没有热舞,继续执行下一轮宏任务,执行
setTimeout; - 首先打印
timerStart,遇到resolve,将promise的状态改为fulfilled,然后将promise.then推入微任务,打印timerEnd; - 最后执行微任务
promise.then,打印success。
4.代码输出结果
Promise.resolve().then(() => {
console.log('promise1');
const timer2 = setTimeout(() => {
console.log('timer2')
}, 0)
});
const timer1 = setTimeout(() => {
console.log('timer1')
Promise.resolve().then(() => {
console.log('promise2')
})
}, 0)
console.log('start');输出结果如下:
start
promise1
timer1
promise2
timer2代码执行顺序如下:
- 首先,
Promise.resolve().then()是微任务,推入微任务队列, timer1是宏任务,推入宏任务队列- 继续执行,打印
start - 开始执行微任务
Promise.resolve().then(),打印promise1 - timer2是宏任务,推入宏任务队列
- 开始执行宏任务,执行
timer1,打印timer1 Promise.resolve().then()推入微任务队列- 执行微任务队列,打印
promise2 - 最后执行宏任务队列的
timer2,打印timer2










