1. É chamado de função anônima que funciona imediatamente (também chamada de função que chama imediatamente)
2. Quando uma função anônima é fechada e, em seguida, um suporte é adicionado à traseira, a função anônima pode ser executada imediatamente! Existe algo mágico?
3. Para usar uma função, devemos primeiro declarar sua existência. A maneira mais comum que usamos é definir uma função usando a declaração de função
4. Objeto de função
Os objetos da função são objetos inerentes ao JavaScript, e todas as funções são na verdade um objeto de função.
Vamos primeiro analisar se o objeto de função pode usar diretamente o construtor para criar uma nova função? A resposta é sim.
var abc = nova função ("x", "y", "return x*y;"); alerta (ABC (2,3)); // "6"5. As funções anônimas não têm nomes, por isso são estendidas à questão de como devemos chamá -las (O_O)?
Chamando funções anônimas①
var abc = função (x, y) {return x+y; } alerta (ABC (2,3)); // "5"A operação acima é realmente equivalente a definir uma função de uma maneira diferente. Esse uso é algo que encontramos com mais frequência.
Por exemplo, quando configuramos uma função de manipulador de eventos de elementos DOM, geralmente não os nomeamos, mas fornecemos ao evento correspondente uma referência a uma função anônima.
Chamando a função anônima②
Use () para incluir a função anônima e adicione um par de colchetes (incluindo a lista de parâmetros).
alerta (((nova função ("x", "y", "return x*y;")) (2,3)); // "6"6. Qual é o papel dos colchetes?
Os colchetes podem dividir nossas expressões em pedaços, e cada peça, ou seja, cada par de aparelhos, tem um valor de retorno. Esse valor de retorno é na verdade o valor de retorno da expressão entre colchetes.
Portanto, quando incluímos uma função anônima com um par de colchetes, os parênteses retornam um objeto de função de uma função anônima.
Portanto, adicionar funções anônimas ao par de suporte é como uma função nomeada e obtemos sua posição de referência. Portanto, se você adicionar uma lista de parâmetros após essa variável de referência, o formulário de chamada da função comum será implementado.
7. 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. Quando o mecanismo JavaScript analisar o código JavaScript, ele 'função' função içar a declaração da função (declaração da declaração da função) no ambiente de execução atual (escopo). As expressões de função devem 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 depois dela. A declaração da função não pode ser realizada e só pode ser chamada na forma de fnName ().
Castanha①
fnName();function fnName(){...}//Normal, because 'promoting' the function declaration, the function call 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 expressionCastanha②
var fnName = function () {alert ('hello world');} (); // parcelas são adicionadas após a expressão da função. When the javascript engine parses here, the function can be called immediately when the javascript engine parses here function fnName(){alert('Hello World');}();//There will not be an error, but the javascript engine only parses the function declaration, ignores the subsequent parentheses, and the function declaration will not be called function(){console.log('Hello World'); AmSe você deseja adicionar colchetes após o corpo da função, pode chamá -lo imediatamente, essa função deve ser uma expressão de função, não uma declaração de função.
Castanha③
(function (a) {console.log (a); // saída de firebug 123, use o () operador}) (123); (função (a) {console.log (a); // saída de firbug 1234, use o () operador} (1234)); // Saída do Firebug 12345, use! Operador} (12345); +function (a) {console.log (a); // Saída do Firebug 123456, Use + Operator} (123456); -função (a) {console.log (a); // Saída do Firebug 1234567, Use - Operator} (1234567); var fn = function (a) {console.log (a); // Saída do Firebug 12345678, Uso = 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.