Função imediata sintaxe invocação
-
06-09-2019 - |
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
.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:
-
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.
-
As expressões de função não pode começar com a função de palavra.
-
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 () {
...
} ()