根据 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').