Les fermetures JavaScript sont une chose très intéressante. Après avoir lu certaines informations connexes //www.vevb.com/article/29472.htm, la chose la plus impressionnante est: elle réalise le public et le privé.
La syntaxe la plus simple pour créer une fermeture non anonyme est:
La copie de code est la suivante:
var obj = (function () {// divers codes});
L'exemple le plus classique de fermetures:
La copie de code est la suivante:
var makecounter = (function () {
var i = 1;
this.test = function () {
console.log (i);
i ++;
}
retourner ceci;
});
var obj = makeCounter ();
obj.test (); // 1
obj.test (); // 2
var obj1 = makeCounter ();
obj1.test (); // 1
obj1.test (); // 2
Privé et public:
La copie de code est la suivante:
var makecounter = (function () {
var i = 1;
// c'est privé
Fonction Log () {
console.log (i);
i ++;
}
// Ce gars est public
this.test () {
enregistrer();
}
retourner ceci;
});
var obj = makeCounter ();
obj.test (); // 1
obj.test (); // 2
obj.log (); //indéfini
Fonction auto-exécutée:
La première fois que j'ai vu un tel code, je me sentais: si avancé;
La copie de code est la suivante:
var obj = (fonction (fenêtre) {
// une variété de codes
}(fenêtre));
Ensuite, je suis allé voir Google et j'ai découvert qu'ils écrivent souvent comme ceci:
La copie de code est la suivante:
var obj = (function () {
var i = 1;
this.test = function () {
console.log (i);
i ++;
}
retourner ceci;
} ());
obj.test (); // 1
obj.test (); // 2
La compréhension la plus simple est que les programmeurs sont paresseux et écrivent deux étapes en une étape.
La copie de code est la suivante:
// c'est une fonction. Il doit utiliser obj () comme celui-ci
var makecounter = function () {
// une variété de codes
}
// c'est un objet. Il est similaire à var obj = makeCounter ();
var obj = (function () {
// une variété de codes
} ());
Il peut également avoir des paramètres:
La copie de code est la suivante:
var output = "Nouveau test";
var obj = (fonction (msg) {
this.test = function () {
console.log (msg);
}
retourner ceci;
}(sortir));
obj.test ();
Il peut également être plus complexe et avancé:
La copie de code est la suivante:
var output = "Nouveau test";
var obj = (fonction (obj, msg) {
// Ce gars est également privé. Similaire à obj.i (! = Obj.i), mais pas obj.i (car il est inaccessible à l'extérieur).
var i = 1;
//privé
Fonction Log () {
console.log (i + ":" + msg);
i ++;
}
//publique
obj.test = function () {
enregistrer();
}
retour obj;
} (obj, sortie));
obj.test (); // 1: nouveau test
obj.i = 100;
// je n'ai pas été changé
obj.test (); // 2: nouveau test
La première fois que nous nous sommes rencontrés, nous avons laissé une profonde impression. L'utilisation des fermetures réalise le maintien de l'état et des attributs; Évite le vol de variables globales à l'écran; met fin à la situation embarrassante où les variables sont toujours redéfinies et réaffectées. Il peut également segmenter un objet en plusieurs fichiers JS. C'est vraiment génial.
Ce qui précède est l'intégralité du contenu de cet article, j'espère que vous l'aimez.