var theThing = null;
var replaceThing = function () {
var originalThing = theThing;
var unused = function () {
if (originalThing)
console.log("hi");
};
theThing = {
longStr: new Array(1000000).join('*'),
someMethod: function () {
console.log(someMessage);
}
};
};
setInterval(replaceThing, 1000);
Question 1 : La fonction déclare le contexte lors de sa création et met à jour les variables locales dans la chaîne de portée lors de son exécution. La chaîne de portée contient des variables locales à l'intérieur de la fonction lors de son exécution. . Comment savez-vous que la fonction inutilisée fera définitivement référence à originalThing ?
Question 2 : Comment expliquer cette fuite de mémoire ? J'espère que les experts pourront l'expliquer plus en détail ?
Question 1 : Une fois que les variables de la fonction (replaceThing) ont quitté leur portée, si la fonction (replaceThing) est utilisée une fois et n'est plus référencée jusqu'à l'exécution du programme, elle sera recyclée après un certain temps.
Question 2 : Si vous regardez l'action d'affectation des objets, l'action de création d'un tableau est effectuée en permanence. 1 000 000 d'opérations de jointure sont effectuées à la fois, et elles sont exécutées en continu. La vitesse de recyclage de la mémoire ne peut pas suivre. son taux de croissance, ce qui entraînera bientôt des fuites de mémoire.