La fonction suivante présente-t-elle une fuite de mémoire?Fuite de mémoire dans JavaScript pour la gestion des événements
var d = document.getElementById("d");
d.onclick = function() {
// blah...
};
La fonction suivante présente-t-elle une fuite de mémoire?Fuite de mémoire dans JavaScript pour la gestion des événements
var d = document.getElementById("d");
d.onclick = function() {
// blah...
};
<div id="parent">
<span id="child">I am a span</span>
</div>
c'est okie
var d = document.getElementById("child");
d.onclick = function() {
// blah...
};
// compensation un événement de dom avant gestionnaire retrait de celui-ci entraînera la perte de mémoire
en ce moment cela va commencer une fuite de mémoire
document.getElementById("parent").innerHTML="";
Ceci n'est pas une fuite de mémoire. Il attache le gestionnaire onclick
à un élément DOM et est assez commun.
No.
Toutes les variables locales, soit variables déclarées dans une fonction (sur la pile) a tendance à perdre le champ dès que l'appel de méthode est terminée.
De même, lorsque vous avez terminé le d
, vous pouvez également le supprimer; delete d;
Sauf s'ils ont une prochaine utilisation ... –
Supprimer d; ne marche pas. Supprimer est uniquement pour les propriétés d'objet. Cependant, d = null; travaux. – Nils
Non, il n'y a pas de fuite de mémoire ici.
De plus, vous pouvez utiliser le tableau de-référencement si vous voulez juste faire une seule ligne -
document.getElementById("d").onclick = function() {
// blah...
};
mais cela est dangereux si l'élément est absent (ou les DOM n'est pas prêt, etc. .), comme document.getElementById
retours null
si l'objet ne se trouve pas dans les DOM (et si null
est un object
lorsque vous typeof
, il est pas cool avec vous essayez de définir les propriétés dessus).
Ah, les caprices de JavaScript.
Vous créez la variable 'd' mais vous attachez un gestionnaire' click' à l'élément 'div', est-ce votre * code * actuel? –
Corrigé, merci. – Howard