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"
silentBeep
fonte
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.
Lawrence Aiello
fonte
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