Precedência da expressão do objeto de função no ecmascript
-
27-09-2019 - |
Pergunta
Para implementar um pequeno compilador que emite o ecmascript, preciso saber o quão forte uma expressão de objeto de função se liga, ou seja, qual é a precedência do "operador"function(a1, a2, ...) { ... }
?
Por exemplo, como éfunction(a1, a2, ...) { ... } (b1, b2, ...)
deveria ser analisado? Para obter o resultado do resultado, a saber, a aplicação de B1, B2, ... ao objeto de função, tenho que usar parênteses em torno do objeto de função no intérprete de rinoceronte.
Solução
Sua function(a1, a2, ...) { ... } (b1, b2, ...)
é inválido e deve retornar um erro de sintaxe. Ecmascript tem o conceito de um FunctionDeclaration
bem como o de um FunctionExpression
. Você pode querer verificar o seguinte:
- Expressões de função vs. declarações de função
- Explique a sintaxe da função anônima encapsulada de JavaScript (@CMS 'Resposta)
Enquanto um FunctionExpression
é um operador, o FunctionDeclaration
é uma sintaxe especial usada para declarar funções, que são automaticamente içadas no topo do escopo da gabinete.
Embrulhar a function
no operador de agrupamento (parênteses) forçará o intérprete a tratá -lo como um FunctionExpression
.
Se você tentar o seguinte no Firebug:
function () { alert('test'); }(); // Syntax Error
(function () { alert('test'); })(); // Works fine
Outras dicas
Para executar uma função literal, ela precisa ser incluída entre parênteses. Qualquer:
(function(...){...})(...);
ou:
(function(...){...}(...));
Sem os parênteses, produz um erro de sintaxe.