Qual é o termo para uma função JavaScript anônima chamada imediatamente?


29

Estou escrevendo um guia de estilo JavaScript para minha equipe, para que possamos organizar e contribuir com nossos documentos com mais facilidade. Mas eu bati um pequeno solavanco que é onde minha pergunta se aplica ...

O que devo chamar de uma função JavaScript anônima chamada imediatamente. Eu sei que poderia simplesmente chamá-lo de "função anônima", mas gostaria de enfatizar o fato de que está sendo chamado imediatamente.

Aqui está um exemplo:

var MyVariable = (function(data){
  return "another value"
})("some value"); 

console.log(MyVariable);
// "another value"

1
Nota muitas vezes você vai ver esta construção (imprecisamente) referida como uma "função de auto-chamando"
AakashM

Respostas:


39

Eles já têm um termo para isso no mundo Javascript. Eles são chamados de Expressões de Função Invocadas Imediatamente (IIFE) .

O que é isso

As funções IIFE não recebem um nome. Em vez disso, eles são executados uma vez quando o intérprete os encontra:

var area = function() {
    var width = 3;
    var height = 2;
    return width * height;
}();

Os parênteses finais após o fechamento entre chaves do bloco de código informam ao intérprete que chame a expressão de função imediatamente.

Se você escrever uma declaração de função, deverá adicionar operadores de agrupamento , ou parênteses, ao redor da função, para solicitar ao intérprete que trate a função como uma expressão que pode ser chamada imediatamente:

var area;
(function() {
    var width = 3;
    var height = 2;
    area = width * height;
}());


Quando eles são usados

Os IIFEs são usados ​​para códigos que precisam ser executados apenas uma vez em uma tarefa, em vez de serem chamados repetidamente.

  1. Como argumento quando uma função é chamada (para calcular valores, etc.)
  2. Atribuir o valor de uma propriedade a um objeto.
  3. Em manipuladores de eventos e ouvintes.
  4. Para evitar conflitos entre dois scripts que podem usar os mesmos nomes de variáveis. Eles podem ser usados ​​como wrappers para soltar código em outro script, onde você não tem certeza se os nomes das variáveis ​​podem ser os mesmos.

Um exemplo: no seu exemplo de uso var area = ..., você não precisa dos parênteses de "quebra automática" da função, porque ela é uma expressão de função em virtude de estar no lado direito do =. Os parênteses de quebra automática são necessários apenas quando a função é gravada como uma declaração de função (ou seja, sem o início var area = ...).
Eric King

@EricKing eu fiz isso certo?
Lawrence Aiello

Poderia ser bom poder chamar mais casualmente essas 'funções expressas'
filtro

@LawrenceAiello Adicionei uma edição para mostrar o que eu quis dizer. Espero que ainda funcione para você.
Eric King

Como uma questão relacionada, há alguma razão para passar um argumento para o IIFE, como mostra a pergunta? Eu só vi isso como você demonstra - sem argumentos (já que qualquer argumento pode ser uma variável local).
Kat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.