2

为了实现一个发出 ECMAScript 的微型编译器,我需要知道函数对象表达式绑定的强度,即“运算符”的优先级是什么 function(a1, a2, ...) { ... }

例如, function(a1, a2, ...) { ... } (b1, b2, ...) 应该如何解析?为了得到想要的结果,即将 b1, b2, ... 应用于函数对象,我必须在 Rhino 解释器中使用括号括住函数对象。

4

2 回答 2

4

function(a1, a2, ...) { ... } (b1, b2, ...)是无效的,应该返回一个语法错误。ECMAScript 具有 a 和 a 的FunctionDeclaration概念FunctionExpression。您可能需要查看以下内容:

虽然 aFunctionExpression是一个运算符,但 theFunctionDeclaration是一种用于声明函数的特殊语法,这些函数会自动提升到封闭范围的顶部。

function分组运算符(括号)中包装 a将强制解释器将其视为 a FunctionExpression

如果您在 Firebug 中尝试以下操作:

function () { alert('test'); }();       // Syntax Error
(function () { alert('test'); })();     // Works fine
于 2010-10-02T11:30:25.973 回答
0

要执行函数文字,需要将其括在括号中。任何一个:

(function(...){...})(...);

或者:

(function(...){...}(...));

没有括号会产生语法错误。

于 2010-10-02T11:31:16.160 回答