在异步函数之外等待不会在控制台中抛出错误

Gre*_*een 13 javascript console asynchronous async-await google-chrome-devtools

MDN说:

请记住,await关键字仅在async函数内部有效.如果你在一个async函数体外使用它,你会得到一个SyntaxError.

但事实并非如此.

在DevTools控制台中尝试此代码,没有错误,只是结果:

async function a(val) { return val; }
await a(10) // await is not inside async function
10
Run Code Online (Sandbox Code Playgroud)

代码或文档有什么问题?

qui*_*mmo 9

MDN文档是正确的,它解释了它在JavaScript中的工作原理.

这只是DevTools添加的一项功能,可让您更轻松地测试异步/等待代码.它不是JavaScript功能.

它看起来像自2017年8月11日起在DevTools中得到支持:

https://chromium.googlesource.com/chromium/src.git/+/e8111c396fef38da6654093433b4be93bed01dce

如果你间谍了

ConsoleModel.js

在第129行,它们具有评估标记为异步的表达式的功能:

async evaluateCommandInConsole
Run Code Online (Sandbox Code Playgroud)


Cal*_*ler 8

没有错误.

您已经找到了DevTools控制台的一个特殊功能!它是为了让它尽可能简单地在实时环境中进行实验async- await代码.您可以想象您在控制台中输入的任何代码都会async自动包含在函数中.事实上,正如另一个答案所指出的,这正是发生的事情.

重要的是要注意,即使这在控制台中有效,它也不是JavaScript的一个功能.

所以,你的所有观察结果都是正确的和预期的!MDN文档是准确的,因为如果您尝试在使用函数await外部的页面上加载脚本async,则会出错.在另一方面,DevTools控制台的设计,使这项工作(专门为开发者生物工程学),因此您的代码运行,而无需在控制台中的任何错误.

这不是DevTools控制台的唯一技巧.通常,如果您真的想测试某些代码在页面上的运行方式,那么最好在页面上实际运行脚本,而不是在控制台中运行.