在编写异步生成器函数时,我注意到以下构造导致 a SyntaxError
:
async function * foo() {
await yield bar; // Can not use 'yield' as identifier inside a generator
}
即使颠倒上下文关键字的顺序是完全可以接受的:
async function * foo() {
yield await bar; // OK
}
UnaryExpression
仔细阅读错误后,我能够通过将括号括在括号内来更正语法,AwaitExpression
以避免将令牌解析yield
为标识符而不是上下文关键字:
async function * foo() {
await (yield bar); // OK
}
但这引出了一个问题,ECMAScript 2018中涉及哪些特定的静态语义导致yield
在这种情况下被解析为标识符,await
而不需要特殊处理?