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
形成的 文字 。
作为 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
形成的 文字 。