javascript - 理解术语和符号 JavaScript

标签 javascript

考虑 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是下面的

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/

相关文章:

javascript - 不需要在 javascript 中转义 innerHTML 字符?

php - 将代码从页面发送到 php 脚本

javascript - Jquery 命令未执行,看不到我做错了什么

javascript - jquery text() 不比较字符串

javascript - 使用 javascript setTimeout 会导致对象内的数据丢失?

Javascript 正则表达式仅使用 <li> 标记内的文本替换 <ul> 或 <ol>

javascript - 使用 jQuery 制作 Nivo slider 方向导航箭头淡入

javascript - 无法正确绑定(bind) observableArray of observables

c# - 我可以在 Microsoft Visual Studio 2010 中缩小 JavaScript 或 aspx 代码吗

Javascript Clonenode() - 通过 id 获取元素?