ECMAScript AssignmentExpression 产生式规则如何产生“foo = 42”?

How can ECMAScript AssignmentExpression production rule produce `foo = 42`?

作为 spec states(是的,5.1,这是故意的):

AssignmentExpression :

    ConditionalExpression
    LeftHandSideExpression = AssignmentExpression
    LeftHandSideExpression AssignmentOperator AssignmentExpression

根据这个定义,我不明白一个简单的 foo = 42 赋值是如何有效的。

我的理解是,foo = 应该始终跟在 ConditionalExpression 或本质上是另一个赋值,但在那种情况下,如果我不使用 ConditionalExpression?所有进一步的 AssignmentExpression 规则都需要 ConditionalExpression 或另一个 AssignmentExpression.

我在这里错过了什么?

= 运算符后的表达式必须始终是 AssignmentExpression。这个 AssignmentExpression 通常不包含另一个赋值,而是一个普通的 ConditionalExpression,它又包含一个更简单的表达式,其中可能包含一个运算符或不,all the way down 通过运算符优先级层次结构到您的数字 123 形成的 文字