Cet article analyse le concept et l'utilisation des fermetures Javascript avec des exemples. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :
En ce qui concerne les fermetures, tout le monde doit en avoir entendu parler. Voici ma simple compréhension.
Pour être honnête, il n'existe pas beaucoup de scénarios dans lesquels les fermetures sont réellement écrites manuellement dans le travail quotidien, mais les frameworks et composants tiers utilisés dans le projet utilisent plus ou moins les fermetures.
Il est donc essentiel de comprendre les fermetures. Haha...
1. Qu'est-ce que la fermeture
En bref, c'est une fonction qui peut lire les variables internes d'autres fonctions.
En raison des caractéristiques de la portée des variables JS, les variables internes ne sont pas accessibles de l'extérieur, mais les variables externes sont accessibles de l'intérieur.
2. Scénarios d'utilisation
1. Implémentez les membres privés.
2. Protégez l'espace de noms et évitez de polluer les variables globales.
3. Mettre en cache les variables.
Regardons d'abord un exemple d'encapsulation :
revenir {
getName : function () {
renvoyer le nom ;
},
setName : fonction (nouveauNom) {
nom = nouveauNom;
>
>
}();
console.log(person.name); // Accès direct, le résultat est : undefined
console.log(person.getName()); // Le résultat est : par défaut
console.log(person.setName("langjt"));
console.log(person.getName()); // Le résultat est : langjt
Regardez les fermetures couramment utilisées dans les boucles pour résoudre le problème du référencement de variables externes :
3. Précautions
1. Fuite de mémoire
Étant donné que les fermetures entraînent le stockage de toutes les variables de la fonction en mémoire, ce qui consomme beaucoup de mémoire, les fermetures ne peuvent pas être abusées, sinon cela entraînerait des problèmes de performances sur la page Web.
Par exemple :
2. Dénomination des variables
Si le nom de variable de la fonction interne et le nom de variable de la fonction externe sont les mêmes, alors la fonction interne ne peut plus pointer vers la variable portant le même nom de la fonction externe.
Par exemple :
其實上面的用法,專業術語叫函數柯里化(Currying),就是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,並且返回接受餘下的參數而且傳回結果的新函數的技術。本質上也利用了閉包可以快取的特性,例如:
var inc = adder(1);
var dec = adder(-1);
//inc, dec現在是兩個新的函數,作用是將傳入的參數值 ( /‐)1
alert(inc(99));//100
alert(dec(101));//100
alert(adder(100)(2));//102
alert(adder(2)(100));//102
再例如阿里玉伯的seaJS源碼中:
var isObject = isType("Object");
var isString = isType("String");
希望本文所述對大家的javascript程式設計有所幫助。