Maison  >  Questions et réponses  >  le corps du texte

javascript - Pourquoi le code suivant perd-il de la mémoire?

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_u1582phpcn_u15822731 Il y a quelques jours439

répondre à tous(1)je répondrai

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-19 10:33:11

    • 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);
        }
      };

    répondre
    0
  • Annulerrépondre