【发布时间】:2020-04-03 22:32:59
【问题描述】:
在编写async generator 函数时,我注意到以下构造会生成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 不需要特殊处理?
【问题讨论】:
标签: javascript syntax language-lawyer generator ecmascript-2018