Pergunta

Essa pergunta já tem resposta aqui:

(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.

Foi útil?

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

http://www.jibbering.com/faq/notes/closures/

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
    }

})();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top