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.

Foi útil?

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:

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top