A seguinte construção JavaScript é chamada de Closure?[duplicado]
-
28-09-2019 - |
Pergunta
Essa pergunta já tem resposta aqui:
- Como é chamada essa prática em JavaScript? 8 respostas
(function() {
//do stuff
})();
EDITAR:Originalmente, pensei que essa construção fosse chamada de fechamento - não que o efeito que ela causou resultasse (potencialmente) em um fechamento - se variáveis fossem capturadas.
Isso não tem nada a ver com o comportamento dos fechamentos em si - eu entendo perfeitamente e não foi o que foi perguntado.
Solução
É uma função anônima (ou mais precisamente uma função anônima com escopo definido) que é executado imediatamente.
O uso de um é que quaisquer variáveis e funções declaradas nele têm como escopo essa função e, portanto, ficam ocultas de qualquer contexto global (para que você obtenha encapsulamento e ocultação de informações).
Outras dicas
é uma função anônima, mas não é um encerramento, pois você não tem referências ao escopo externo
Normalmente chamo isso de algo como "a invocação imediata de uma função anônima".
Ou, mais simplesmente, “auto-invocação de função”.
Tipo de.Na verdade, não fecha nada e é chamado imediatamente, então é apenas uma função anônima.
Pegue este código:
function foo() {
var a = 42;
return function () {
return a;
}
}
var bar = foo();
var zab = bar();
alert(zab);
Aqui a função retornada por foo() é um encerramento.Ele fecha em torno da variável a.Mesmo que a pareça ter saído do escopo há muito tempo, invocar o encerramento chamando-o ainda retorna o valor.
Não, um fechamento é algo assim:
function outer()
{
var variables_local_to_outer;
function inner()
{
// do stuff using variables_local_to_outer
}
return inner;
}
var closure = outer();
o fechamento retém uma referência às variáveis locais da função que o retornou.
Editar:É claro que você pode criar um encerramento usando funções anônimas:
var closure = (function(){
var data_private_to_the_closure;
return function() {
// do stuff with data_private_to_the_closure
}
})();