Question

    

Cette question a déjà une réponse ici:

         
(function() {

  //do stuff

})();

EDIT: Je pensais à l'origine de cette construction a été appelée fermeture - pas l'effet que cela a causé des résultats (potentiellement) dans une fermeture - si les variables sont capturées.

Ceci est en aucune façon de le faire avec le comportement des fermetures eux-mêmes -. Ce que je comprends très bien et n'a pas été ce qui était demandé

Était-ce utile?

La solution

Il est une fonction anonyme (ou plus exactement un scoped fonction anonyme ) qui est exécuté immédiatement.

L'utilisation de l'un est que toutes les variables et les fonctions déclarées dans celui-ci sont étendus à cette fonction et sont donc cachés de tout contexte global (de sorte que vous gagnez l'encapsulation et le masquage de l'information).

Autres conseils

il est une fonction anonyme, mais ce n'est pas une fermeture puisque vous avez aucune référence à la portée externe

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

Je parle souvent de quelque chose comme « l'invocation immédiate d'une fonction anonyme. »

Ou, plus simplement, "l'auto-invocation de la fonction."

kindof. Il est n'a pas vraiment près autour de quoi que ce soit bien, et il est appelé immédiatement, il est donc vraiment juste une fonction anonyme.

Prenez ce code:

function foo() {
    var a = 42;
    return function () {
        return a;
    }
}

var bar = foo();
var zab = bar();
alert(zab);

Ici, la fonction renvoyée par foo () est une fermeture. Il se ferme autour de la variable a. Même si un aurait apear avoir disparu depuis longtemps hors de portée, invoquant la fermeture en l'appelant retourne toujours la valeur.

Non, une fermeture est plutôt quelque chose le long de ces lignes:

function outer()
{
    var variables_local_to_outer;

    function inner()
    {
        // do stuff using variables_local_to_outer
    }

    return inner;
}

var closure = outer();

la fermeture conserve une référence à des variables locales de la fonction qui a renvoyé.

Modifier : Vous pouvez bien sûr créer une fermeture en utilisant des fonctions anonymes:

var closure = (function(){

    var data_private_to_the_closure;

    return function() {
        // do stuff with data_private_to_the_closure
    }

})();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top