O JavaScript é mais casual em comparação com outras linguagens de programação; portanto, o código JavaScript está cheio de todos os tipos de métodos de escrita estranhos. Às vezes você pode ver flores no nevoeiro. Obviamente, ser capaz de entender vários tipos de métodos de escrita também é uma compreensão mais aprofundada das características da linguagem JavaScript.
(function () {…}) () e (function () {…} ()) são duas maneiras comuns de executar imediatamente as funções no JavaScript. No começo, pensei que era uma função anônima embrulhada em um suporte e, em seguida, adicionei um suporte para chamar a função. Por fim, consegui o objetivo de executá -lo imediatamente após a definição da função. Mais tarde, descobri que o motivo para adicionar colchetes não era o caso. Para entender a execução das funções imediatamente, você precisa primeiro entender alguns conceitos básicos de funções.
Declarações de função, expressões de função, funções anônimas
Declaração da função: function fnName () {…}; Use a palavra -chave da função para declarar uma função e, em seguida, especifique um nome de função, chamado declaração de função.
Expressão da função var fnName = function () {…}; declara uma função usando a palavra -chave da função, mas não nomeia a função. Finalmente, a função anônima é atribuída uma variável, chamada expressão de função, que é a forma mais comum de sintaxe da expressão da função.
Função anônima: function () {}; Use a palavra -chave da função para declarar uma função, mas a função não é nomeada, por isso é chamada de função anônima. Funções anônimas pertencem a expressões de função. As funções anônimas têm muitas funções. Se você atribuir uma variável, cria uma função e, se atribuir um evento, se tornará um manipulador de eventos ou cria um fechamento, etc.
A diferença entre a declaração da função e a expressão da função é que 1. Ao analisar o código JavaScript, o mecanismo JavaScript 'promoverá a declaração da função da declaração da declaração da função (função da declaração da declaração) no ambiente de execução atual (escopo). A expressão da função deve esperar até que o mecanismo Javascirtp seja executado em sua linha antes de analisar a expressão de função de cima para baixo. 2. A expressão da função pode ser chamada imediatamente com colchetes após a expressão da função. A declaração da função não pode ser realizada e só pode ser chamada na forma de fnName (). Aqui estão dois exemplos das diferenças entre os dois.
fnName();function fnName(){ ...}//Normal, because 'promoting' the function declaration, function calls can be fnName();var fnName=function(){ ...}//An error is reported, the variable fnName has not saved a reference to the function, and the function call must be after the function expression var fnName = function () {alert ('hello world');} (); // parcelas são adicionadas após a expressão da função. Quando o mecanismo JavaScript analisa aqui, a função pode ser chamada imediatamente de função fnName () {alert ('hello world');} (); // não haverá um erro, mas o mecanismo JavaScript apenas analisa a declaração da função, ignora os colchetes, e a função da função não será chamada de função (); AmDepois de entender alguns conceitos de funções básicas, olhei para as duas maneiras de escrever (function () {…}) () e (function () {…} ()) imediatamente. No começo, pensei que era uma função anônima embrulhada em um suporte e adicionei um suporte para chamar a função imediatamente. Naquela época, eu não sabia por que tinha que adicionar colchetes. Mais tarde, percebi que, se tivesse que adicionar colchetes após o corpo da função, eu poderia chamá -lo imediatamente. Então essa função deve ser uma expressão de função, não uma declaração de função.
(function (a) {console.log (a); // saída de firbug 123, use o () operador}) (123); (function (a) {console.log (a); // saída de firbug 1234, use o () operador} (1234)); ! function (a) {console.log (a); // Saída do Firebug 12345, use! Operador} (12345); +function (a) {console.log (a); // Saída do Firebug 123456, use o operador +} (123456); -função (a) {console.log (a); // Saída do Firebug 1234567, use o operador} (1234567); var fn = function (a) {console.log (a); // Saída do Firebug 12345678, use o = operador} (12345678)Você pode ver o resultado da saída e adicioná -lo antes da função! , +, - e até vírgulas podem ser usadas para executar imediatamente após a definição da função e (),! Operadores como +, -, = convertem declarações de função em expressões de função, eliminando a ambiguidade entre o mecanismo JavaScript que identifica expressões de função e declarações de funções, dizendo ao mecanismo JavaScript que essa é uma expressão de função, não uma declaração de função, você pode adicionar parênteses após e executar o código da função imediatamente.
Adicionar colchetes é a maneira mais segura de fazê -lo, porque! Operadores como, +e - também executam operações com o valor de retorno da função, que às vezes causa problemas desnecessários.
Mas qual é a utilidade de escrever dessa maneira?
Não há conceito de escopo privado em JavaScript. Se você declarar algumas variáveis no escopo global ou local em um projeto desenvolvido por várias pessoas, poderá ser substituído por outras pessoas com o mesmo nome. De acordo com as características da cadeia do escopo das funções JavaScript, essa técnica pode ser usada para imitar um escopo privado e usar uma função anônima como um "contêiner". O "contêiner" pode acessar variáveis externas, enquanto o ambiente externo não pode acessar variáveis dentro do "contêiner"; portanto, as variáveis definidas dentro (function () {…}) () não conflitam com variáveis externas, comumente conhecidas como "wrapper anonymous" ou "espaço para nome".
O jQuery usa esse método. Quando o código jQuery é envolvido (function (janela, indefinido) {… JQuery Code…} (janela), ele pode proteger as variáveis internas do jQuery ao chamar o código jQuery no escopo global.
Este artigo é um entendimento e compilação pessoal. Se houver algum erro, aponte -os. As opiniões do artigo são referenciadas de:
"Guia de autoridade para JavaScript" e "Programação Avançada"