Maison > interface Web > js tutoriel > le corps du texte

Exemple d'explication des fermetures et des rappels en JavaScript

黄舟
Libérer: 2017-08-10 10:39:12
original
1150 Les gens l'ont consulté

Cet article explique principalement les fermetures et rappels js, les concepts et caractéristiques des fermetures, et analyse les étapes et méthodes d'utilisation avec des exemples

1. Fermetures

La fermeture est une difficulté et une caractéristique du langage Javascript. De nombreuses applications avancées reposent sur la fermeture.

Les fermetures ont trois caractéristiques :

1. Les fonctions imbriquées

2. >

3. Les paramètres et variables ne seront pas recyclés par le mécanisme de récupération de place.

Une fermeture est une fonction qui a accès à une variable dans la portée d'une autre fonction. La manière la plus courante de créer une fermeture est de créer une autre fonction au sein d'une fonction et d'y accéder via une autre fonction locale. variables de cette fonction. L'un des avantages et des inconvénients de l'utilisation des fermetures est que les variables locales peuvent résider en mémoire et que les variables globales peuvent être évitées. Les variables globales sont appelables dans chaque module, ce qui est voué à être désastreux. Par conséquent, il est recommandé d’utiliser des variables locales privées et encapsulées. Une fois la fonction générale exécutée, l'objet actif local est détruit et seule la portée globale est enregistrée dans la mémoire. Mais la situation des fermetures est différente !

Exemple 1 :

//Une fermeture est une fonction dont la valeur de retour est une autre fonction. La fonction renvoyée peut être utilisée pour accéder aux parties locales de l'extérieur. la variable externe.


function outer(){
  var val = 0;
  return function (){
   val += 1;
   document.write(val + "<br />");
  };
}
var outObj = outer();
outObj();//1,执行val += 1后,val还在
outObj();//2
outObj = null;//val 被回收
var outObj1 = outer();
outObj1();//1
outObj1();//2
Copier après la connexion
la fermeture gardera la variable en mémoire. Si elle est mal utilisée, elle augmentera la consommation de mémoire (si de nombreuses fonctions externes () sont définies dans le fichier. exemple ci-dessus, de nombreuses variables val seront alors enregistrées dans la mémoire).

Principe du garbage collection de JavaScript :

(1) En JavaScript, si un objet n'est plus référencé, alors l'objet sera recyclé par GC < 🎜. >

(2) Si deux objets se référencent l'un l'autre et ne sont plus référencés par un tiers, alors les deux objets qui se référencent l'un l'autre seront également recyclés.

Alors, quels sont les avantages d'utiliser des fermetures ? Les avantages de l'utilisation des fermetures sont :

1. Espérer qu'une variable résidera longtemps en mémoire

2. 🎜>

3. Existence de membres privés

2. Principe de rappel

fonction : je pars maintenant, je vous préviendrai quand il arrivera." Il s'agit d'un processus asynchrone. Pendant le processus "Je pars" (exécution de la fonction), "vous" pouvez tout faire et "vous avertir" (rappel ) lorsque "arrive" (l'exécution de la fonction est terminée). Le processus suivant

Exemple 1 :


Exemple 2 :
function doSomething(callback){
  callback(1,2);
}
function numberAdd(a,b){
  document.write(a+b);
}
doSomething(numberAdd);//3
Copier après la connexion


//Ajoutez la méthode doSomething à la classe Thing, où le modèle d'appel du constructeur est utilisé

function Thing(name){
  this.name = name;
}
Copier après la connexion


Si vous avez un numéro Pour un tableau, vous souhaitez écrire une méthode publique de tri, mais la méthode de tri (de petit à grand ou de grand à petit) est décidée par la personne qui appelle la méthode de tri. La méthode de tri peut être implémentée à l'aide de rappels. Bien sûr, vous pouvez écrire 2 méthodes, l'une consiste à trier de petit à grand et l'autre à trier de grand à petit. Personnellement, je pense que le rappel consiste à transmettre la décision. donner le pouvoir à l'ingénieur en développement commercial et le laisser décider comment y faire face. Cette idée est similaire à celle avec laquelle nous sommes habituellement en contact. C'est différent et un peu inconnu, mais ce type de réflexion peut être particulièrement bénéfique en mode asynchrone. programmation. Je ne sais pas si ma compréhension est correcte. L'exemple de code suivant est un cas d'utilisation typique de rappels :

Thing.prototype.doSomething = function(callback){
 callback(this.name);
};
function showName(name){
 document.write(name);
}
var t = new Thing("zhangsan");
t.doSomething(showName);//zhangsan
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!