Javascript 根据ECMAScript,带有参数的函数调用是否是有效的左侧表达式
根据ECMAScript,带参数的函数调用是否有效Javascript 根据ECMAScript,带有参数的函数调用是否是有效的左侧表达式,javascript,function,arguments,function-call,Javascript,Function,Arguments,Function Call,根据ECMAScript,带参数的函数调用是否有效 LeftHandSideExpression[Yield, Await] : NewExpression[?Yield, ?Await] CallExpression[?Yield, ?Await] OptionalExpression[?Yield, ?Await] 如果我们进一步深入,我们可以看到下面的非终端调用表达式类似这样的内容: CallExpression[?Yield, ?Await] Arg
LeftHandSideExpression[Yield, Await] :
NewExpression[?Yield, ?Await]
CallExpression[?Yield, ?Await]
OptionalExpression[?Yield, ?Await]
如果我们进一步深入,我们可以看到下面的非终端调用表达式
类似这样的内容:
CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
这是否意味着要写一些类似于:
alert('Hello')=1代码>这是一个非常好的问题,LeftHandSideExpression可能不是该产品的理想名称;即使可能没有右侧,也会使用它。:-)
在规范的后面,当确定赋值的目标是否有效时,规范会检查表达式()的AssignmentTargetType。如果该类型不是简单的
,则赋值无效。CallExpression参数(例如,alert('Hello')
)和其他一些(super()
)的AssignmentTargetType是无效的()。因此,您不能分配给alert('Hello')
FWIW,这可能很有用:(但它不能回答这个问题)。那么您知道:CallExpression[?Yield,?wait]参数[?Yield,?wait]
的意思吗。好的@T.J.Crowder非常感谢你。但是你能解释一下这两者之间的关系吗:12.15.3静态语义:AssignmentTargetType AssignmentExpression:YieldExpression ArrowFunction AsyncArrowFunction LeftHandSideExpression=AssignmentExpression LeftHandSideExpression AssignmentOperator AssignmentExpression
和我的问题。我看到,如果赋值表达式的左侧出现了那些非终端
,则返回无效
(注意:这就是我理解的方式,可能完全不同,我错了)
但是调用表达式
不存在。@Kevin-你的警报('Hello'))=1
是赋值表达式。作为确定该赋值表达式是否有效的一部分,需要检查(alert('Hello')
)左侧的AssignmentTargetType是否为simple
。它没有,因为alert('Hello')
是CallExpression参数,其赋值targetType为无效。因此赋值表达式无效。simple
的assignmentTargetType
是什么意思?@Kevin-我认为这是对LeftHandSide表达式进行分类的一种方法。