Exemples de fermeture JavaScript expliqué_compétences Javascript
May 16, 2016 pm 04:51 PML'avantage de ceci est que les fonctions internes peuvent accéder aux paramètres et variables de la fonction externe dans laquelle elles sont définies.
Tout d’abord, construisons un objet simple.
var testObj = {
valeur : 10,
ajouter : function(inc){
this.value = (typeof inc === "number") inc : 1;
}
};
testObj.add();
testObj.value; // 11
testObj.add(2);
testObj.value; // 13
Il y a un problème avec l'écriture de cette façon. Il n'est pas garanti que la valeur ne soit pas modifiée illégalement. comme suit.
var testObj = (function(){
var value = 10;
return {
add: function(inc){
value = (typeof inc === "number") ? getValue : function (){
valeur de retour ;
testObj.add();
testObj.getValue(); // 11
testObj.add(2);
testObj.getValue(); // 13
Nous pouvons généralement appeler une fonction pour initialiser testObj La fonction renverra un objet littéral. La variable est définie ici, qui est toujours disponible pour les méthodes add et getValue, mais la portée de la fonction la rend invisible pour les autres programmes. Dans le même temps, nous pouvons également conclure que la fonction interne a un cycle de vie plus long que sa fonction externe.
Copier le code
};
var obj = new MyObj("javascript");obj.getStatus(); // "javascript"
Il n'y a rien de mal à écrire ceci, mais ce sera un peu "inutile ", pourquoi ? Que diriez-vous d'utiliser une méthode getStatus pour accéder à une propriété accessible directement ? Bien entendu, cela n’a de sens que si le statut est une propriété privée.
};
var myObj = obj("javascript");
myObj.getStatus(); // "javascript"
Ici, lorsque nous appelons obj, il renvoie un nouvel objet contenant la méthode getStatus, un la référence à l'objet est stockée dans myObj Même si obj a été renvoyé, la méthode getStatus bénéficie toujours du privilège d'accéder à l'attribut status de l'objet obj. La méthode getStatus n'accède pas à une copie du paramètre, elle accède au paramètre lui-même. Ceci est possible car la fonction a accès au contexte dans lequel elle a été créée, ce que l'on appelle une fermeture.

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Quelle est la signification de la fermeture dans l'expression lambda C++ ?

Comment implémenter la fermeture dans une expression C++ Lambda ?

Quels sont les avantages et les inconvénients des fermetures dans les fonctions C++ ?

Résoudre le problème de fuite de mémoire causé par les fermetures

L'impact des pointeurs de fonction et des fermetures sur les performances de Golang

Comment les fermetures sont-elles implémentées en Java ?

Appels enchaînés et fermetures de fonctions PHP

Résumé des avantages et des inconvénients des fonctions et fermetures anonymes de Golang
