2010-09-26 5 views

Répondre

2
<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=""; 
0

Ceci n'est pas une fuite de mémoire. Il attache le gestionnaire onclick à un élément DOM et est assez commun.

0

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;

+0

Sauf s'ils ont une prochaine utilisation ... –

+0

Supprimer d; ne marche pas. Supprimer est uniquement pour les propriétés d'objet. Cependant, d = null; travaux. – Nils

1

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.