Je suis en contact avec JavaScript depuis longtemps, et chaque fois que je comprends les fermetures, je cherche un travail sur le front-end du Web récemment, donc j'ai besoin de consolider la fondation.
Cet article fait référence à la fermeture du blog de Joy_LEE basée sur son blog et s'efforce d'expliquer ma compréhension sous forme de commentaires. S'il y a une inappropriation, la critique et la correction sont les bienvenues.
Dans la programmation avancée, cela est dit: Lorsque d'autres fonctions sont définies à l'intérieur d'une fonction, une fermeture est créée. La fermeture a la permission d'accéder à toutes les variables contenues dans la fonction.
(Comment comprenez-vous cette phrase? Selon cette phrase, une fermeture est une fonction imbriquée! Une fonction imbriquée peut bien sûr accéder aux variables de la fonction la contenant, et il n'y a pas de problème.)
D'une manière générale, les fonctions internes peuvent accéder aux variables au niveau précédent ou même aux niveaux mondiaux. Donc, certaines personnes comprennent ceci: grâce à la fermeture, l'accès externe aux variables au sein de la fonction locale peut être obtenu.
(Si nous divisons simplement la portée en un seul niveau, supposons que la portée globale comme premier niveau, où la portée interne du corps de la fonction définie est le deuxième niveau, et la portée interne du corps de fonction définie est imbriquée dans la variable de deuxième niveau (cette variable est appelée variable locale), et le deuxième niveau ne peut pas accéder au troisième niveau, et vice-versa être trouvé dans la portée de ce niveau, puis recherché au niveau précédent jusqu'au premier niveau mondial. Forcer le mécanisme de collecte des ordures GC à ne pas recycler les ressources occupées par cette chaîne.
fonction a () {var i = 0; fonction b () {alert (++ i); } return b; } var c = a (); c ();Autrement dit, la fonction de la fermeture est qu'après que A a été exécuté et retourné, la fermeture fait que le mécanisme de collecte des ordures JavaScript n'a pas récupéré les ressources occupées par A, car l'exécution d'une fonction interne b de A doit s'appuyer sur les variables en a.
En raison de l'existence de la fermeture, après la fonction A revient, je existe toujours. De cette façon, chaque fois que C () est exécuté, I est la valeur de I alertée après l'ajout de 1.
Ensuite, si A ne renvoie pas la fonction B, la situation est complètement différente. Parce qu'après avoir exécuté A, B n'est pas renvoyé dans le monde extérieur de A, mais n'est référencé que par A, et à l'heure actuelle, A ne sera référencé que par B, donc les fonctions A et B sont référencées par les autres mais ne seront pas perturbées par le monde extérieur (référé par le monde extérieur), les fonctions A et B seront recyclées par GC.
En fait, c'est la fermeture qui prolonge le cycle de vie de la variable. Habituellement, la portée d'une fonction, c'est-à-dire les variables, sera détruite après l'exécution de la fonction, mais lorsque la fonction renvoie une fermeture, tant que la fermeture n'est pas libérée, toute la chaîne de portée occupera la mémoire. (Les fermetures prolongent le cycle de vie d'une variable, qui se réfère au cas d'être référencé au premier niveau. Mais sans cette référence, les fermetures peuvent-elles encore être appelées fermetures?)
En parlant de chaîne de portée: c'est-à-dire la portée de la fonction, la portée de la fonction de la couche précédente ... et la portée globale. Lorsque vous accédez à une variable, si vous ne l'avez pas, recherchez la couche par calque jusqu'au monde entier. Si vous ne l’avez pas encore, vous signalerez une erreur.
(Je veux vraiment me plaindre que la chaîne de portée de la fermeture est incurvée.)
PS: Certains internautes ont recommandé un autre article pour analyser le concept de fermetures JavaScript . Est-ce que cela fait autorité? Enfin, il y a un concept clair:
Cela dit tellement, quelle est exactement une fermeture? Résumons-le ci-dessous:
La fermeture est un concept qui décrit un phénomène dans lequel réside la mémoire après l'exécution de la fonction. Tant que vous saisissez ce concept de base, les fermetures ne sont pas difficiles à comprendre.
L'article ci-dessus vous permet de comprendre les fermetures en une phrase (simple et facile à comprendre) est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.