大厂面试题,经验总结,可远观亦可亵玩

130 阅读1分钟
try {
    (async function() { a().b().c() })()
} catch (e) {
    console.log(`执行出错:${e.message}`)
}

这道题目主要三个考点:

  • 执行一个没有定义的函数会发生什么
  • 在 async 内部发生报错会发生什么
  • try catch 只能捕获同步代码的异常 因此答案就明了了。

因为我们执行了一个未定义的函数,所以会报错 a is not defind,又因为是在 async 中,所以报错信息会显示 in promise。最后 try cathch 只能捕获同步代码的抛错,因为是 async,所以走不到 catch 里面。

如果我们把代码这样改一下就可以了:

try {
    await (async function() { a().b().c() })()
} catch (e) {
    console.log(`执行出错:${e.message}`)
}

另外说个小知识点,最新的 Chrome 已经支持在全局作用域下使用 await 了。