javascript - problème de fuite de mémoire js
黄舟
黄舟 2017-05-19 10:42:35
0
4
713
   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 ?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(4)
给我你的怀抱

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

仅有的幸福

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é.

世界只因有你

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

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

巴扎黑

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal