2013-06-04 17 views
5

Biorąc pod uwagę element jak div na stronie i dodać jakiś obiekt do niego tak:Czy trzeba czyścić związany obiekt kiedy usunąć element

div.data=data; 

Teraz, gdy próbuję usunąć div element, czy konieczne jest ustawienie jego danych na wartość zerową przed usunięciem?


Aktualizacja:

W rzeczywistości, pobrać dane z serwera, a następnie będę lista to tak (przed listy, usunę stare ememetns:

var data=[{name:'xx'},{name:'yy'}...]; 

var resultDiv=document.getElementById("result"); 
resultDiv.innerHTML=""; //clear the old items 
for(var i=0,len=data.length;i<len;i++){ 
    var div=document.createElement("div"); 
    div.data=data[i]; 
    resultDiv.appendChild(div); 
} 
.... 
+0

Zależy od tego, czym jest "dane". Starsze przeglądarki, zwłaszcza IE, miały problemy z wyciekiem pamięci, jeśli dane zawierały cykliczne odniesienia do elementu div (który zawiera zmienne zamykające, jeśli masz funkcje!). – Bergi

+0

Środowisko wykonawcze JS powinno obecnie używać narzędzia do zbierania śmieci, więc powiedziałbym, że nie. Problem może być odwrotnie - wszelkie dane dołączone do elementów DOM pozostaną w pamięci, jeśli nie zostaną usunięte. – millimoose

+0

@millimose: Środowisko wykonawcze JS od początku używało funkcji odśmiecania (NS2.0). Problem polega na tym, że starsze wersje IE używały licznika odwołań, które nie potrafiły obsłużyć odwołań cyklicznych. – slebetman

Odpowiedz

-1

Brak Gdy usuniesz element div, nie ma elementu, który ma dostęp do pliku div.data, więc jego pamięć bez odwołań i zadanie odnikającego śmieci, aby je wyczyścić:

Jednak odbiór śmieci rozpoczyna się w czas nieokreślony. Również akt zbierania śmieci wymaga czasu.

+0

Usuwanie odniesienia nadal nie uruchamia się z garbage collector. Wtedy "dane" byłyby nie tylko niedostępne, ale niedostępne dwukrotnie. – Bergi

+0

@Bergi masz rację: http://perfectionkills.com/understanding-delete/ – basarat

Powiązane problemy