javascript - Pourquoi le code suivant perd-il de la mémoire?
phpcn_u1582
phpcn_u1582 2017-05-19 10:31:11
0
1
452
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 ?

phpcn_u1582
phpcn_u1582

répondre à tous(1)
过去多啦不再A梦
  • 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.

    theThing = {
      longStr: new Array(1000000).join('*'),
      someMethod: function () {
        console.log(someMessage);
      }
    };
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal