AssignmentExpression 的 EcmaScript 语法指定了以下内容:

AssignmentExpression :
    ConditionalExpression
    YieldExpression
    ArrowFunction
    AsyncArrowFunction
    LeftHandSideExpression = AssignmentExpression                     <-------------- here
    LeftHandSideExpression AssignmentOperator AssignmentExpression

AssignmentOperator : one of
    *= /= %= += -= <<= >>= >>>= &= ^= |= **=

我想知道将 LeftHandSideExpression = AssignmentExpression 指定为单独的产品而不是简单地将 = 包含到 AssignmentOperator 背后的基本原理是什么?

最佳答案

如果将两个产生式合并,则语法将完全相同。

但是,在规范后面的几个地方,这两种产品的处理方式不同。例如在语法后面的静态语义部分,然后在解构赋值部分,这仅适用于 = 产品。

如果这两个产生式是一个,那么提到它们的短语就必须更笨拙,例如“LeftHandSideExpression AssignmentOperator AssignmentExpression when the AssignmentOperator is =”。

所以大概这两个作品是分开写的,所以在文本中分开讨论它们会更容易也更容易混淆。

关于javascript - 为什么用 `=` 文字而不是部分 `AssignmentOperator` 符号为赋值运算符指定单独的产生式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46744200/

10-12 19:53