书接之前代码输出题目,
前端面试题之代码输出
前端面试题之代码输出二
前端面试题之代码输出三
前端面试题之代码输出四
前端面试题之代码输出五
前端面试题之代码输出六
前端面试题之代码输出七
前端面试题之代码输出八
前端面试题之代码输出九
异步&事件循环
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










