Maison interface Web js tutoriel Exemples de fermeture JavaScript expliqué_compétences Javascript

Exemples de fermeture JavaScript expliqué_compétences Javascript

May 16, 2016 pm 04:51 PM
javascript 闭包

L'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.

Copier le code Le code est le suivant :

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.
Copier le code Le code est le suivant :

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.

Continuons à regarder un exemple d'appel de constructeur.



Copier le code


MyObj.prototype.getStatus = function(){
return this.status;
};

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.


Copier le code

Le code est le suivant :var obj = function(status){ return { getStatus : function(){ return status;
}
};
};

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.
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Quelle est la signification de la fermeture dans l'expression lambda C++ ? Quelle est la signification de la fermeture dans l'expression lambda C++ ? Apr 17, 2024 pm 06:15 PM

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

Comment implémenter la fermeture dans une expression C++ Lambda ? Comment implémenter la fermeture dans une expression C++ Lambda ? Jun 01, 2024 pm 05:50 PM

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

Quels sont les avantages et les inconvénients des fermetures dans les fonctions C++ ? Quels sont les avantages et les inconvénients des fermetures dans les fonctions C++ ? Apr 25, 2024 pm 01:33 PM

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 Résoudre le problème de fuite de mémoire causé par les fermetures Feb 18, 2024 pm 03:20 PM

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 L'impact des pointeurs de fonction et des fermetures sur les performances de Golang Apr 15, 2024 am 10:36 AM

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

Comment les fermetures sont-elles implémentées en Java ? Comment les fermetures sont-elles implémentées en Java ? May 03, 2024 pm 12:48 PM

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

Appels enchaînés et fermetures de fonctions PHP Appels enchaînés et fermetures de fonctions PHP Apr 13, 2024 am 11:18 AM

Appels enchaînés et fermetures de fonctions PHP

Résumé des avantages et des inconvénients des fonctions et fermetures anonymes de Golang Résumé des avantages et des inconvénients des fonctions et fermetures anonymes de Golang May 05, 2024 am 09:54 AM

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

See all articles