前端面试题之代码输出(十一)
  FTKwE7sqlksi 2023年11月02日 29 0

书接之前代码输出题目,

前端面试题之代码输出

前端面试题之代码输出二

前端面试题之代码输出三

前端面试题之代码输出四

前端面试题之代码输出五

前端面试题之代码输出六

前端面试题之代码输出七

前端面试题之代码输出八

前端面试题之代码输出九

前端面试题之代码输出十


异步&事件循环
21.代码输出结果
async function async1() {
    console.log('async1 start');
    await new Promise(resolve => {
        console.log('promise1')
        resolve('promise1 resolve')
    }).then(res => console.log(res))
    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
promise1 resolve
async1 success
async1 end

代码执行顺序如下:

22.代码输出结果
async function async1() {
    console.log("async1 start");
    await async2();
    console.log("async1 end");
}

async function async2() {
    console.log("async2");
}

console.log("script start");

setTimeout(function () {
    console.log("setTimeout");
}, 0);

async1();

new Promise(resolve => {
    console.log("promise1");
    resolve();
}).then(function () {
    console.log("promise2");
});
console.log('script end')

输出结果如下:

script start
async1 start
async2      
promise1    
script end  
async1 end  
promise2    
setTimeout

代码执行顺序如下:

  1. 开头定义了 async1async2 两个函数,但是并未执行,执行 script 中的代码,所以打印出 script start ;
  2. 遇到定时器 Settimeout ,它是一个宏任务,将其加入到宏任务队列;
  3. 之后执行函数 async1 ,首先打打印出 async1 start ;
  4. 遇到 await ,加入微任务队列;
  5. 然后跳出 async1async2 ,遇到 Promise ,打印出 promise1 ;
  6. 遇到 resolve ,将其加入到微任务队列,然后执行后面的 script 代码,打印出 script end ;
  7. 之后就该执行微任务队列了,首先打印出 async1 end ,然后打印出 promise2 ;
  8. 执行完微任务队列,就开始执行宏任务队列中的定时器,打印出 setTimeout
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
FTKwE7sqlksi