Shi*_*umi 5 javascript yield node.js ecmascript-6
以下代码...
假设yield是在生成器函数内部,something并且else已定义,等等.
const value = something || yield else();
Run Code Online (Sandbox Code Playgroud)
...在V8(Chrome或Nodejs)中生成以下内容:
const start = initial || yield wait();
^^^^^
SyntaxError: Unexpected strict mode reserved word
Run Code Online (Sandbox Code Playgroud)
...这在Firefox中:
SyntaxError: yield is a reserved identifier
Run Code Online (Sandbox Code Playgroud)
我第一次注意到这是在我写的蓝鸟 协程中.解决方法是将yield wait()括号括起来.
此错误发生在分析时而不是执行时; 所以,我的第一个假设是,这是因为这里存在句法模糊性.我查看了yield关键字,它将其定义为:
[rv] = yield [expression];
Run Code Online (Sandbox Code Playgroud)
yield接受一个表达式并返回一个值.如果没有||(OR)运算符,就不会发生这种情况const value = yield else();; 所以,我查看了运算符优先级.的||(OR)运算符在评价5的前yield在操作者2.优先级看起来不错.
看起来||(OR)运算符需要在任何一侧使用表达式,而我认为这yield [expression] 是一个表达式,也许这不是真的?为什么我需要将该部分包含在括号中以使其明确表达式?什么可能|| yield含糊不清?我确定我只是错过了它; 或者,是否有一些偷偷摸摸/更深层次的原因?
这个问题也很难找到,所以希望我不会在这里重复.
(如果您想看到它,可以使用此Plunker https://plnkr.co/edit/rNidnFuyIOFkRkkcyWRV来发生错误.)
谢谢!
如果你想弄清楚语法规则,你必须看看规范.
甲LogicalOrExpression被定义为
LogicalANDExpression:
BitwiseORExpression
LogicalANDExpression && BitwiseORExpression
LogicalORExpression:
LogicalANDExpression
LogicalORExpression || LogicalANDExpression
Run Code Online (Sandbox Code Playgroud)
一个LogicalANDExpression只能包含BitwiseORExpression秒.但是YieldExpression不是BitwiseORExpression,它是一个AssignmentExpression:
AssignmentExpression:
ConditionalExpression
[+Yield] YieldExpression
ArrowFunction
LeftHandSideExpression = AssignmentExpression
LeftHandSideExpression AssignmentOperatorAssignmentExpression
Run Code Online (Sandbox Code Playgroud)
它基本上在表达式层次结构中更高:
+--------------------------+
| AssignmentExpression |
+--------------------------+
^
|
+----------------+---------------+
| |
| |
+--------------------------+ +--------------------------+
| ConditionalExpression | | YieldExpression |
+--------------------------+ +--------------------------+
^
|
|
+--------------------------+
| LogicalORExpression |
+--------------------------+
^
|
|
+--------------------------+
| LogicalANDExpression |
+--------------------------+
^
|
|
+--------------------------+
| BitwiseORExpression |
+--------------------------+
Run Code Online (Sandbox Code Playgroud)
对于一个可能解释为什么语法结构是这样的是,yield也是一个有效的标识符名称(发电机或产量表现之外).但是有关详细信息,您可能需要在https://esdiscuss.org/上询问.
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |