题
为了实现一个发出 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(...){...}(...));
如果没有括号,则会产生语法错误。
不隶属于 StackOverflow