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

javascript - problème de fuite de mémoire js

   var user = { name: 'tom', age: 20, gender: 'male' }
   var test = document.getElementById('test');
       test.onclick = function() {
           test.innerHTML = user.name;
       }
   user = null; // 释放对象
   

J'ai récemment rencontré une question d'entretien comme celle-ci. Y a-t-il une fuite de mémoire dans ce paragraphe ? Si oui, quelqu'un pourrait-il expliquer pourquoi et comment éliminer la fuite de mémoire ?

黄舟黄舟2730 Il y a quelques jours695

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

  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:44:35

    Memory Leak En termes simples, la mémoire allouée ne peut pas être utilisée ou recyclée jusqu'à la fin du processus du navigateur.

    Pour le problème de référence circulaireÉliminez simplement la référence et définissez le test=null,因为jsmécanisme de collecte des orduresIl sera exécuté périodiquement pour connaître ceux qui ne sont plus utilisés# 🎜🎜#Variable, puis libèrent la mémoire occupée par celle-ci.Garbage collection

    répondre
    0
  • 仅有的幸福

    仅有的幸福2017-05-19 10:44:35

    Le principe est celui indiqué dans l'image ci-dessous. Votre test est elem dans l'image. Il fait référence à un élément dom et ajoute un gestionnaire d'événements à l'élément dom. Cependant, la fonction de traitement des événements fait référence au test dans la portée externe, c'est donc comme suit : Cela devient une référence circulaire.

    Ce qui semble être une fuite de mémoire est en réalité le test plutôt que l'utilisateur. Effacer la référence au test externe peut détruire cette référence circulaire.

    En fait, cela ne posera pas de problème dans les navigateurs modernes grâce à l'utilisation d'algorithmes de marquage et de balayage. Dans les anciens navigateurs, l'algorithme de récupération de place ne provoquera que des fuites de mémoire dues aux références, c'est-à-dire que les références circulaires provoqueront des objets. être indisponible et ne peut toujours pas être recyclé.

    répondre
    0
  • 世界只因有你

    世界只因有你2017-05-19 10:44:35

    Qu'est-ce qu'une fuite de mémoire ?

    Cela provoquera une erreur d'exécution. . . . . .

    répondre
    0
  • 巴扎黑

    巴扎黑2017-05-19 10:44:35

    Décidément, c'est inclus dans les questions d'entretien CVTE. Étant donné que la référence à user.name est conservée dans l'événement click, elle sera toujours divulguée.
    Quant à savoir comment éliminer le problème, la seule chose à laquelle je pense est de le déréférencer directement comme mentionné dans le post

    répondre
    0
  • Annulerrépondre