根据 ECMAScript,带参数的函数调用是否有效的左手边表达式
Are function calls with arguments valid left-Hand-Side-Expressions according to ECMAScript
根据 ECMAScript,带参数的函数调用是否有效 left-Hand-Side-Expressions?
LeftHandSideExpression[Yield, Await] :
NewExpression[?Yield, ?Await]
CallExpression[?Yield, ?Await]
OptionalExpression[?Yield, ?Await]
如果我们进一步深入 CallExpression,我们可以在 non-terminal CallExpression
下方看到类似这样的内容:
CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
这是否意味着写这样的东西:
alert('Hello') = 1;
有效。如果你 运行 上面的代码你会看到函数调用发生在 ReferenceError: Invalid left-hand side in assignment
之前
这是个很好的问题,LeftHandSideExpression 可能不是该作品的理想名称;即使可能没有右侧,也会使用它。 :-)
稍后在规范中,在确定赋值目标是否有效时,规范会检查表达式 (here). If that type is not simple
, the assignment is invalid. The AssignmentTargetType for CallExpression Arguments (e.g., alert('Hello')
) and a few others (super()
, etc.) is invalid
(here) 的 AssignmentTargetType。所以你不能分配给 alert('Hello')
.
根据 ECMAScript,带参数的函数调用是否有效 left-Hand-Side-Expressions?
LeftHandSideExpression[Yield, Await] :
NewExpression[?Yield, ?Await]
CallExpression[?Yield, ?Await]
OptionalExpression[?Yield, ?Await]
如果我们进一步深入 CallExpression,我们可以在 non-terminal CallExpression
下方看到类似这样的内容:
CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
这是否意味着写这样的东西:
alert('Hello') = 1;
有效。如果你 运行 上面的代码你会看到函数调用发生在 ReferenceError: Invalid left-hand side in assignment
之前
这是个很好的问题,LeftHandSideExpression 可能不是该作品的理想名称;即使可能没有右侧,也会使用它。 :-)
稍后在规范中,在确定赋值目标是否有效时,规范会检查表达式 (here). If that type is not simple
, the assignment is invalid. The AssignmentTargetType for CallExpression Arguments (e.g., alert('Hello')
) and a few others (super()
, etc.) is invalid
(here) 的 AssignmentTargetType。所以你不能分配给 alert('Hello')
.