Bien que les fermetures soient une idée fondamentale en JavaScript, les nouveaux arrivants peuvent les trouver vagues et difficiles à comprendre. Plus précisément, la définition de la norme ECMA peut être difficile à comprendre sans aucune expérience du monde réel. Par conséquent, plutôt que d'expliquer en détail la notion de fermeture dans cet article, nous allons vous faciliter la compréhension en utilisant le code réel.
function A(name){ function B(){ console.log(name); } return B; } var C = A("Closure"); C();//Closure
C'est la fermeture la plus simple.
Maintenant que nous connaissons les principes fondamentaux, examinons brièvement en quoi cela diffère d'une fonction typique. Voici comment le code susmentionné apparaît lorsqu'il est traduit en langage naturel :
Une seule déclaration peut résumer ces cinq opérations :
La fonction B à l'intérieur de la fonction A et le nom de la variable sont référencés par la variable C à l'extérieur de la fonction A.
Avec une petite modification, cette déclaration définit une fermeture comme suit :
Lorsqu'une fonction interne est référencée par une variable extérieure à la fonction externe, une fermeture est formée.
Par conséquent, effectuer les cinq opérations ci-dessus définit une fermeture.
Avant de comprendre les utilisations des fermetures, comprenons le mécanisme GC (Garbage Collection) de JavaScript.
En JavaScript, lorsqu'un objet n'est plus référencé, il sera récupéré par le GC, sinon, il continuera à être conservé en mémoire.
Dans l'exemple ci-dessus, B dépend de A car B est défini dans A, et A est indirectement référencé par C car la variable externe C fait référence à B.
C'est-à-dire que A ne sera pas collecté par le GC et continuera à être conservé en mémoire. Pour prouver ce raisonnement, améliorons légèrement l'exemple ci-dessus.
function A(){ var count = 0; function B(){ count ++; console.log(count); } return B; } var C = A(); C();// 1 C();// 2 C();// 3
Pourquoi le décompte n'est-il pas réinitialisé ?
Mécanisme de fermeture :
Ainsi, si vous définissez certaines variables dans un module et que vous souhaitez garder ces variables en mémoire mais ne pas « polluer » les variables globales, vous pouvez définir ce module à l'aide de fermetures.
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!