Dans l'article précédent, j'ai expliqué le mécanisme de recyclage en js, mais pour moi à l'époque, j'étais un peu confus quant au concept de mécanisme de recyclage. Maintenant, j'ai une compréhension plus approfondie du mécanisme de recyclage, alors postez ceci. article pour résumer et approfondir votre mémoire.
Pourquoi existe-t-il un mécanisme de recyclage ? pourquoi ?
Par exemple, j'ai une carte mémoire. Cette mémoire est de 8 Go. J'enregistre des fichiers, des vidéos et de la musique sur cette carte mémoire. Au fur et à mesure que je stocke de plus en plus de contenu, cette carte mémoire ne peut pas être enregistrée. pour enregistrer d'autres fichiers sur cette carte mémoire, je dois supprimer certains fichiers. Mais ces fichiers supprimés sont supprimés manuellement par nous-mêmes, n'est-ce pas ?
Ces problèmes surviennent également dans ces langages de programmation, oui, la mémoire ! Toutes les variables que nous déclarons consomment de la mémoire, et plus nous avons de variables, plus elles s'exécuteront lentement. Pas seulement des variables bien sûr, tout ce qui se trouve dans le code. Afin de résoudre ces problèmes, les concepteurs de ces langages ont conçu un ensemble de règles de recyclage de code.
Les règles de recyclage des codes sont les suivantes :
1. Les variables globales ne seront pas recyclées.
2. Les variables locales seront recyclées, c'est-à-dire qu'une fois l'exécution de la fonction terminée, tout ce qu'elle contient sera détruit.
3. Tant qu'il est référencé par un autre scope, il ne sera pas recyclé
J'utilise quelques exemples pour le prouver.
function a(){ var user = "追梦子"; return user; } var b = a(); console.log(b); //追梦子
Logiquement parlant, je ne peux pas accéder aux variables de la fonction a, mais j'ai reçu la valeur de retour de la fonction a via la variable globale b, donc le code final est devenu le suivant.
function a(){ var user = "追梦子"; return user; } var b = "追梦子"; console.log(b);
Il semble qu'il n'y ait pas de recyclage de code là-dedans, alors regardons le morceau de code suivant.
function a(){ var num = 0; return function(){ num ++; console.log(num); }; } var b = a(); b(); //1 b(); //2 b(); //3
Voyez, si vous suivez la pratique normale, la sortie devrait être 3 fois et 1 fois, car une fois le corps de la fonction exécuté, le code dans le corps de la fonction sera effacé Puisqu'il sera effacé, exécutez ensuite cette section. time Lors de l'écriture du code, num devrait toujours être 1, mais la situation ici est un peu différente. J'ai dit plus haut que tant que les variables locales de la fonction sont référencées par une autre portée, ce code ne sera pas détruit.
Le code ci-dessus ressemble à ceci
function a(){ var num = 0; return function(){ num ++; console.log(num); }; } var b = function(){ num ++; console.log(num); }; b(); b(); b();
Ensuite, la portée de la fonction anonyme renvoyée par la fonction a est déplacée de la fonction a vers la fenêtre. Puisque cette fonction anonyme est référencée par la variable globale b, elle ne sera pas détruite.
function a(){ var num = 0; return function(){ num ++; console.log(num); }; } var b = { fn:a() } b.fn(); //1 b.fn(); //2 b.fn(); //3
La même chose est vraie, car la fonction anonyme est référencée par l'attribut fn de l'objet b, changeant sa portée. En termes simples, tant qu'une fonction ou une variable locale est modifiée dans sa portée, la fonction ou la variable locale ne le sera pas. détruit.
Ce qui précède représente l'intégralité du contenu de cet article. J'espère que vous pourrez trouver de l'aide dans le mécanisme de recyclage js.