书接之前代码输出题目,
前端面试题之代码输出
前端面试题之代码输出二
前端面试题之代码输出三
前端面试题之代码输出四
前端面试题之代码输出五
前端面试题之代码输出六
前端面试题之代码输出七
前端面试题之代码输出八
前端面试题之代码输出九
异步&事件循环
19.代码输出结果
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
setTimeout(() => {
console.log('timer1')
}, 0)
}
async function async2() {
setTimeout(() => {
console.log('timer2')
}, 0)
console.log("async2");
}
async1();
setTimeout(() => {
console.log('timer3')
}, 0)
console.log("start")输出结果如下:
async1 start
async2
start
async1 end
timer2
timer3
timer1代码执行顺序如下:
- 首先进入
async1,打印async1 start - 之后遇到
async2,进入async2,遇到定时器timer2,加入宏任务队列,之后打 印async2 - 由于
async2阻塞了后面代码的执行,所以执行后面的定时器timer3,将其加入宏任 务队列,之后打印start - 然后执行
async2后面的代码,打印出async1 end,遇到定时器timer1,将其加入宏任务队列 - 最后,宏任务队列有三个任务,先后顺序为
timer2,timer1,timer3,没有微任务,所以直接所有的宏任务按照先进先出的原则执行
20.代码输出结果
async function async1() {
console.log('async1 start');
await new Promise(resolve => {
console.log('promise1')
})
console.log('async1 success');
return 'async1 end'
}
console.log('srcipt start')
async1().then(res => console.log(res))
console.log('srcipt end')输出结果如下:
srcipt start
async1 start
promise1
srcipt end代码执行顺序如下:
这里需要注意的是在 async1 中 await 后面的 Promise 是没有返回值的,也就是它的状态始终是 pending 状态,所以在 await 之后的内容是不会执行的,包括 async1 后面的 .then










