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

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

有帮助吗?

解决方案

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

虽然一个 FunctionExpression 是一个运算符,则 FunctionDeclaration 是一种用于声明函数的特殊语法,它会自动提升到封闭范围的顶部。

包裹一个 function 在里面 分组运算符 (括号)将迫使解释器将其视为 FunctionExpression.

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

function () { alert('test'); }();       // Syntax Error
(function () { alert('test'); })();     // Works fine

其他提示

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

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

或者:

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

如果没有括号,则会产生语法错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top