【发布时间】:2014-01-08 11:46:42
【问题描述】:
考虑 ECMA-262 的 Sec. 11.2。
Syntax
MemberExpression :
PrimaryExpression
FunctionExpression
MemberExpression [ Expression ]
MemberExpression . IdentifierName
new MemberExpression Arguments
NewExpression :
MemberExpression
new NewExpression
CallExpression :
MemberExpression Arguments
CallExpression Arguments
CallExpression [ Expression ]
CallExpression . IdentifierName
Arguments :
( )
( ArgumentList )
ArgumentList :
AssignmentExpression
ArgumentList , AssignmentExpression
LeftHandSideExpression :
NewExpression
CallExpression
PrimaryExpression :
this
Identifier
Literal
ArrayLiteral
ObjectLiteral
( Expression )
第一个问题是:
( Expression ) 在PrimaryExpression 防御中的含义是什么?
{prop: 'prop'} 是 ObjectLiteral。因此{prop: 'prop'}() 是CallExpression。我正在尝试使用JSFIDDLE 进行检查,但我有
[20:16:12.347] SyntaxError: syntax error @ http://fiddle.jshell.net/_display/:21
第二个问题:
为什么会出现这个错误?我认为{prop: 'prop'}() 是正确的行,除了错误将是{prop: 'prop'} is not a function。
UPD:我使用的是 firefox 25.0.1
【问题讨论】:
-
我相信,
{...}()在语法上是有效的。在我的 chrome 上,我没有收到语法错误,而是收到“对象不是函数”——这意味着它是有效的。在您的小提琴中,只需将var x =添加到您的行中,您将收到相同的错误。 -
@Thrustmaster 有趣。您需要添加该作业吗?
-
@Thrustmaster 非常有趣,感谢您的评论。你能解释一下为什么
var x={prop:'prop'}()在语法上是有效的吗?如果可能,请提供证明/链接。我仍然无法回答我的两个问题。 -
@cstack 这是因为 JS Parser 将其视为代码块而不是对象。 :)
标签: javascript