[英]await outside of async function doesn't throw error in console
MDN说 :
请记住,
await
关键字仅在async
函数内有效。 如果在async
函数体外使用它,则会出现SyntaxError
。
但事实并非如此。
在DevTools控制台中尝试此代码,没有错误,只是结果:
async function a(val) { return val; }
await a(10) // await is not inside async function
10
代码或文档有什么问题?
MDN文档是正确的,它解释了它在JavaScript中的工作原理。
这只是DevTools添加的一项功能,可让您更轻松地测试异步/等待代码。 它不是JavaScript功能。
看起来它自2017年8月11日起在DevTools中得到支持:
https://chromium.googlesource.com/chromium/src.git/+/e8111c396fef38da6654093433b4be93bed01dce
如果你间谍了
在第129行,它们具有评估标记为异步的表达式的功能:
async evaluateCommandInConsole
没有错误。
您已经找到了DevTools控制台的一个特殊功能 ! 它是让尽可能简单的实验async
- await
实时环境中的代码。 您可以想象您在控制台中输入的任何代码都会自动包装在async
函数中。 事实上,正如另一个答案所指出的,这正是发生的事情。
重要的是要注意,即使这在控制台中有效,它也不是JavaScript的一个功能。
所以,你的所有观察结果都是正确的和预期的! MDN文档是准确的,因为如果您尝试在async
函数之外使用await
的页面上加载脚本,则会出错。 另一方面,DevTools控制台旨在使其工作(专门用于开发人员工效学),因此您的代码在控制台中运行时没有任何错误。
这不是DevTools控制台的唯一技巧 。 通常,如果您真的想测试某些代码在页面上的运行方式,那么最好在页面上实际运行脚本,而不是在控制台中运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.