为了实现一个发出 ECMAScript 的小型编译器,我需要知道函数对象表达式绑定(bind)的强度,即“运算符”的优先级是什么
函数(a1, a2, ...) { ... }
?
例如,如何
函数(a1, a2, ...) { ... } (b1, b2, ...)
应该被解析吗?为了获得想要的结果,即对函数对象应用 b1、b2、...,我必须在 Rhino 解释器中在函数对象周围使用括号。
最佳答案
您的 function(a1, a2, ...) { ... } (b1, b2, ...)
无效,应返回语法错误。 ECMAScript 具有 FunctionDeclaration
和 FunctionExpression
的概念。您可能需要查看以下内容:
- Function expressions vs. Function declarations
- Explain JavaScript's encapsulated anonymous function syntax (@CMS' answer)
虽然FunctionExpression
是一个运算符,但FunctionDeclaration
是一种用于声明函数的特殊语法,它会自动提升到封闭范围的顶部。
将函数
包装在 grouping operator 中(括号)将强制解释器将其视为 FunctionExpression
。
如果您在 Firebug 中尝试以下操作:
function () { alert('test'); }(); // Syntax Error
(function () { alert('test'); })(); // Works fine
关于javascript - ECMAScript 中函数对象表达式的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3845426/