Приоритет выражения объекта функции в ECMAScript - PullRequest
2 голосов
/ 02 октября 2010

Чтобы реализовать крошечный компилятор, который испускает ECMAScript, мне нужно знать, насколько сильно связывается выражение объекта функции, то есть каков приоритет «оператора» function(a1, a2, ...) { ... }

Например, как function(a1, a2, ...) { ... } (b1, b2, ...) должен быть разобран? Чтобы получить желаемый результат, а именно применение b1, b2, ... к объекту функции, я должен использовать скобки вокруг объекта функции в интерпретаторе Rhino.

Ответы [ 2 ]

4 голосов
/ 02 октября 2010

Ваш function(a1, a2, ...) { ... } (b1, b2, ...) недействителен и должен возвращать синтаксическую ошибку. ECMAScript имеет как FunctionDeclaration, так и FunctionExpression. Вы можете проверить следующее:

В то время как FunctionExpression является оператором, FunctionDeclaration является специальным синтаксисом, используемым для объявления функций, которые автоматически поднимаются в верхнюю часть области видимости.

Включение function в оператор группировки (в скобках) заставит интерпретатор рассматривать его как FunctionExpression.

Если вы попробуете следующее в Firebug:

function () { alert('test'); }();       // Syntax Error
(function () { alert('test'); })();     // Works fine
0 голосов
/ 02 октября 2010

Чтобы выполнить литерал функции, его необходимо заключить в скобки.Либо:

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

, либо:

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

Без скобок выдается синтаксическая ошибка.

...