Pergunta

Há um JSLint opção , uma das partes boas de fato, que "[requer] parênteses ao redor imediato invocações ", significando que a construção

(function () {

  // ...

})();

em vez disso precisa ser escrito como

(function () {

  // ...

}());

A minha pergunta é esta - Alguém pode explicar por que essa segunda forma pode ser considerado melhor? É mais resistente? Menos propenso a erros? Que vantagem que ele tem sobre a primeira forma?


Uma vez que esta pergunta, eu vim a entender a importância de ter uma distinção visual clara entre os valores de função e os valores das funções. Considere o caso em que o resultado da invocação imediata é o lado direito de uma expressão de atribuição:

var someVar = (function () {

  // ...

}());

Embora os parênteses ultraperiféricas são sintaticamente desnecessário, o parêntese de abertura dá uma indicação up-front que o valor a ser atribuído é não função em si, mas sim o resultado da função que está sendo chamado.

Este é semelhante ao conselho de Crockford sobre capitalização das funções de construtor - que se destina a servir como uma dica visual para ninguém olhar para o código-fonte

.
Foi útil?

Solução

A partir de Douglass Crockford estilo guia convenção : (procure por "invocada imediatamente")

Quando uma função é para ser chamado imediatamente, a expressão inteira invocação deve ser envolto em parênteses para que seja claro que o valor que está sendo produzido é o resultado da função e não a própria função.

Então, basicamente, ele sente que torna mais clara a distinção entre os valores da função, e os valores das funções. Então, é uma questão de estilo, não é realmente uma diferença substancial no próprio código.

de referência atualizado, PPT idade já não existe

Outras dicas

Funções anônimas ligou imediatamente para se envolver-lo em parens porque:

  1. Eles são expressões de função e deixando parens fora faria com que ele ser interpretada como uma declaração de função que é um erro de sintaxe.

  2. As expressões de função não pode começar com a função de palavra.

  3. Ao atribuir a expressão da função a uma variável, a própria função não é devolvido, o valor de retorno da função é retornado , portanto, os parênteses avaliar o que está dentro deles e produzir um valor. quando a função é executada, eo arrasto parens ..}() causa a função para executar imediatamente.

Ou, use:

void function () {
...
} ()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top