Este artigo analisa os métodos de criação e chamada de funções anônimas no JS. Compartilhe para sua referência. O método de implementação específico é o seguinte:
As funções anônimas são funções sem nomes, também chamadas de fechamento, que permitem a criação temporária de uma função sem um nome especificado. Mais frequentemente usados como um valor para os parâmetros de retorno de chamada, muitos novatos não sabem sobre funções anônimas. Vamos analisá -lo aqui.
Nome da função da função (lista de parâmetros) {função corporal;}
Se você está criando funções anônimas, deve ser:
function () {função corpo;}
Por ser uma função anônima, geralmente não há parâmetros passados para ele.
Por que criar funções anônimas? Sob quais circunstâncias as funções anônimas serão usadas? Existem dois cenários comuns para funções anônimas, uma é a função de retorno de chamada e a outra é executar diretamente a função.
Funções de retorno de chamada, como operações assíncronas AJAX, requerem funções de retorno de chamada. Não vou explicar em detalhes aqui. Em relação às funções executadas diretamente, vou entender isso depois de analisar um exemplo:
Copie o código da seguinte forma: <Script Language = "JavaScript">
var a = "a";
(função(){
var a = "b";
alerta (a);
}) ();
alerta (a);
</script>
No código acima, duas caixas de alerta serão emitidas em sequência. O conteúdo da primeira caixa de alerta é B e o segundo é a. Você viu algum benefício? À direita, o uso da execução da função pode limitar o escopo das variáveis para que as mesmas variáveis em scripts diferentes possam coexistir.
Abaixo, vamos primeiro entender os conceitos relacionados às funções anônimas.
Declarações de função. Para usar uma função, devemos primeiro declarar sua existência. A maneira mais comum que usamos é definir uma função usando instruções de função, como:
Copie o código da seguinte forma: função abc () {
// Código para processar
}
function abc () {// code a processar}
Obviamente, sua função também pode estar com parâmetros ou mesmo com valores de retorno.
A cópia do código é a seguinte: Veja a planície do CLIPboardPrint?
função abc (x, y) {
retornar x+y;
}
função abc (x, y) {return x+y; }
No entanto, não importa como você defina sua função, o intérprete JS a traduzirá em um objeto de função. Por exemplo, você define o número de função de um dos exemplos acima e insira o seguinte código:
Copie o código da seguinte forma: Alert (Typeof ABC); // "Função"
Seu navegador exibirá uma caixa rápida, solicitando que o ABC seja um objeto de função. Então, o que exatamente é o objeto de função?
Objeto de função
O objeto de função é um objeto inerente no 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. Por exemplo:
A cópia do código é a seguinte: var abc = nova função ("x", "y", "retorna x*y;");
alerta (ABC (2,3)); // "6"
Acredito que todos deveriam ter algum entendimento de como declarar uma função agora. Então, o que é uma função anônima?
Declarar funções anônimas
Como o nome indica, as funções anônimas são funções sem nomes reais. Por exemplo, removemos o nome da função no exemplo acima e, em seguida, determinamos se é uma função:
Copie o código da seguinte forma: alerta (tipoof function () {}); // "função"
alerta (função typeof (x, y) {return x+y;}); // "função"
alerta (tipo de nova função ("x", "y", "return x*y;")) // "função"
alerta (typeof function () {}); // "função"
alerta (função typeof (x, y) {return x+y;}); // "função"
alerta (tipo de nova função ("x", "y", "return x*y;")) // "função"
Podemos ver facilmente que todos eles são objetos de função, em outras palavras, são todos funções, mas todos têm uma característica - sem nomes. Então, nós os chamamos de "funções anônimas". No entanto, precisamente porque eles não têm um "nome", não temos como encontrá -los. Isso estende a questão de como chamar uma função anônima.
Chamando a função anônima
Para chamar uma função, devemos ter um método para localizá -lo e fazer referência a ele. Então, precisaremos encontrar um nome para isso. Por exemplo:
Copie o código da seguinte forma: var abc = function (x, y) {
retornar 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.
Na verdade, existe outra maneira de chamar funções anônimas, que é o fragmento de jQuery que vemos - use () para incluir as funções anônimas e, em seguida, adicionar um par de colchetes (incluindo listas de parâmetros). Vamos dar uma olhada nos seguintes exemplos:
Copie o código da seguinte forma: alerta ((function (x, y) {return x+y;}) (2,3)); // "5"
alerta (((nova função ("x", "y", "return x*y;")) (2,3)); // "6"
Muitas pessoas podem se perguntar por que esse método pode ser chamado com sucesso? Se você acha que esse aplicativo é estranho, confira minha explicação abaixo.
Você conhece 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.
Não sei se você pode entender o texto acima. Se você ainda não consegue entender, dê uma olhada no código a seguir e experimente.
Copie o código da seguinte
// O construtor do ABC é o mesmo que o construtor de funções anônimas. Ou seja, a implementação das duas funções é a mesma.
alerta ((ABC) .Constructor == (função (x, y) {return x+y;}). construtor);
PS: Construtor refere -se a uma função que cria um objeto. Isto é, o corpo da função representado pelo objeto de função.
Em resumo, entenda (função anônima contida entre colchetes) como um objeto de função retornado pela expressão do suporte e, em seguida, você pode fazer uma chamada normal de lista de parâmetros para este objeto de função. (Eu cometi um erro aqui antes. Somente expressões de função não podem ser chamadas diretamente. Remova os colchetes de função anônima e deve ser atribuído com a expressão. Ou seja, (function () {alert (1)}) () deve ser equivalente a a = function () {alert (1)} () e não posso remover a =)
Encerramento
O que é um fechamento? Os fechamentos referem-se a blocos de código em uma determinada linguagem de programação que permite a existência de uma função de primeiro nível e as variáveis gratuitas definidas na função de primeiro nível não podem ser lançadas. Até que a função de primeiro nível seja liberada, essas variáveis gratuitas não lançadas podem ser aplicadas fora da função de primeiro nível.
como? Estava suando ... estava tudo bem, eu também (embora eu entenda, era apenas uma questão de capacidade de expressão). Vamos explicar de uma maneira mais simples: o fechamento é na verdade um recurso de idioma. Refere -se à linguagem de programação que permite que as funções sejam consideradas como objetos e, em seguida, as variáveis da instância (local) podem ser definidas em funções como operações em objetos. Essas variáveis podem ser salvas nas funções até que o objeto de instância da função seja destruído. Outros blocos de código podem obter os valores dessas variáveis de instância (local) de alguma forma e aplicá -las ao aplicativo.
Não sei se ficará mais claro depois de explicar dessa maneira. Se você ainda não entende, vamos simplificá -lo: os fechamentos realmente se referem a variáveis locais definidas nas funções em execução na linguagem de programação.
Agora, vejamos um exemplo:
Copie o código da seguinte forma: var abc = function (y) {
var x = y; // esta é uma variável local
Return function () {
alerta (x ++); // é aqui que x é chamado na variável local da função de primeiro nível no recurso de fechamento e opera nele
alerta (y-); // A variável de parâmetro referenciada também é uma variável livre
}} (5); // inicialização
abc (); // "5" "5"
abc (); // "6" "4"
abc (); // "7" "3"
alerta (x); // um erro! "X" não está definido!
Depois de ver isso, você pode saber se o trecho de código do jQuery está fechando?
Na minha opinião, vamos falar sobre isso. Se o recurso de fechamento é aplicado, é necessário determinar se o elemento mais importante deste código é: variáveis locais não restrivadas. Então é óbvio que é impossível aplicar o recurso de fechamento sem nenhuma implementação. Mas e se houver uma implementação em uma função anônima? Ele também precisa determinar se existem variáveis locais não restritas em sua implementação. Então, se você perguntar quais recursos no JS são usados no início do trenó de código jQuery? Então é apenas uma chamada para funções anônimas e funções anônimas. No entanto, implica as características dos fechamentos e pode ser implementado a qualquer momento.
O uso mais comum:
Copie o código da seguinte forma: (function () {
alerta ('água');
}) ();
Obviamente, os parâmetros também podem ser incluídos:
Copie o código da seguinte forma: (function (o) {
alerta (O);
})('água');
Deseja usar chamadas acorrentadas com funções anônimas? Muito simples:
Copie o código da seguinte forma: (function (o) {
alerta (O);
Retornar argumentos.callee;
}) ('água' ('Down');
Você conhece todas as funções anônimas comuns, vamos dar uma olhada nos incomum:
Copie o código da seguinte forma: ~ (function () {
alerta ('água');
}) (); // a escrita é um pouco legal ~
function void () {
alerta ('água');
} (); // diz -se que o mais eficiente ~
+function () {
alerta ('água');
} ();
-função(){
alerta ('água');
} ();
~ function () {
alerta ('água');
} ();
!função(){
alerta ('água');
} ();
(função(){
alerta ('água');
} ()); // um pouco de execução forçada ~
Espero que este artigo seja útil para a programação JavaScript de todos.