考虑 Sec. 11.2 ECMA-262。
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
最佳答案
第一个问题:
( Expression )
只是表示一个 (
,一个 Expression
,然后是一个 )
。
第二个问题:
{prop: 'prop'}()
被解析为:
// a block
{
// syntax error
prop: 'prop'
}
// syntax error
()
你可以添加括号,然后你会得到预期的错误:
({prop: 'prop'}())
这也有效,因为 block 在那里无效:
var obj = {prop: 'prop'}
obj()
关于javascript - 理解术语和符号 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20689646/