Como você pode imaginar, existem muitas maneiras de executar funções anônimas imediatamente. Para resumir, existem três maneiras típicas (existem outras maneiras, informe-nos):
Método um
(função() {
//…
})();
Método 2
função vazia() {
//…
}();
Método três
~função() {
//…
}();
Você deve ter visto o Método 1 e o Método 2. Aqui explicamos principalmente o Método 3. Antes de explicar o terceiro método, revisamos agora a definição do operador "~" (negação de bit) no EMCAScript (página 72 da quinta edição), uma tradução simples:
Converta o valor antigo em um número inteiro de 32 bits combinando instruções com operadores. Execute a instrução após o operador e converta a linha. O resultado é um número inteiro de 32 bits e retornado.
Como pode ser entendido acima, na verdade, os operadores bit a bit podem retornar imediatamente o valor da expressão a seguir. Na verdade, outros operadores bit a bit podem atingir este propósito, por exemplo:
!função() {
//…
}();
etc. podem atingir nosso objetivo. Portanto, na verdade não há outra razão para usar "~", é apenas que o código "parece bom" :^)
Eficiência não é tanto a eficiência de execução de funções anônimas de três maneiras, mas é melhor analisar diretamente a eficiência de execução de cada operador. Então, vamos comparar e dar uma olhada nas definições de “()” e “void” na especificação EMCA
Operadores de Grupo (quinta edição, página 66)
Retorna o resultado da execução de uma expressão
nulo (página 70, 5ª edição)
Combinar instruções com operadores retorna indefinido
Como o operador de grupo também precisa executar a instrução e retornar o valor retornado pelo bloco de instrução, em comparação com void, haverá múltiplas operações para obter o bloco de instrução (embora não consuma muito desempenho), portanto, neste caso o desempenho de void é melhor que o do operador de grupo.
Comparando os dois, a comparação de desempenho do método três é obviamente inferior aos dois primeiros. Resumindo, de uma perspectiva gramatical, entre os três métodos de funções anônimas acima, o método dois é melhor que o método um, e o método três é o menos eficiente.
Resuma e pense nas vantagens entre os três
O método 1 é muito comum e seguro, então ninguém irá culpá-lo por usar este método. No entanto, os alunos que usam o método 1 podem muitas vezes ter o "problema" de esquecer de combinar colchetes (especialmente quando o bloco de instruções é muito longo., I). muitas vezes erram)
Usar operadores bit a bit para executar funções anônimas está muito na moda e é usado para parecer legal. Muitos IDEs (como IDEA) e ferramentas de realce de sintaxe não suportam a terceira forma de escrita.
void é o mais eficiente, mas sempre parece muito inchado em comparação com as outras duas implementações (só mais alguns caracteres?)
Então
Considerando a quantidade de código e a eficiência, é correto usar o método um em casos extremos onde o código extra precisa ser salvo, e usar o método três para dar prioridade à eficiência. na verdade, a diferença de eficiência entre os três métodos é muito grande. Portanto, é quase insustentável utilizar esse método exclusivamente baseado na eficiência.
O plano específico a adotar precisa ser considerado com base na situação real. Por exemplo, costumo usar o método três porque 1. É conveniente (basta adicionar um caractere) 2. Corresponder colchetes quando a função é longa será confuso 3. É legal de usar, mas o método 3 muitas vezes me faz olhar para ele Membros da equipe de código estão perturbados.
Se você possui código básico baseado em estrutura, como algumas bibliotecas de classes, usar o método 1 é o mais seguro e fácil de entender para todos, portanto, é a escolha mais segura.
[Texto original: http://www.gracecode.com/archives/3004/ Muito bom, todos podem aprender com isso