2013-06-04 2 views
5

Данный элемент, как div на странице, и я добавить объект к нему, как это:Нужно ли очищать связанный объект при удалении элемента

div.data=data; 

Теперь, когда я пытаюсь удалить div, необходимо ли установить его данные в значение null перед удалением?


Update:

В самом деле, я получить данные с сервера, то я перечислю его, как это (перед списком, я удалить старые 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

Зависит от того, что такое 'data'. У старых браузеров, особенно IE, были проблемы с утечкой памяти, если данные содержали циклические ссылки на div (который включает в себя переменные замыкания, если у вас есть функции!) – Bergi

+0

JS runtime должен использовать сборщик мусора в эти дни, поэтому я бы сказал нет. Проблема, скорее всего, будет наоборот: любые данные, которые вы прикрепляете к элементам DOM, остаются в памяти, если их не удалять. – millimoose

+0

@millimose: JS runtime всегда использовал сборщик мусора с самого начала (NS2.0). Проблема в более старых версиях IE использовала сборщик мусора ссылок, который не мог обрабатывать циклические ссылки. – slebetman

ответ

-1

Нет Когда вы удаляете div, нет элемента, у которого есть доступ к div.data. Поэтому его незарегистрированная память и работа сборщика мусора, чтобы очистить ее.

Однако сборка мусора начинается с u неопределенное время. Также акт сбора мусора требует времени.

+0

Удаление ссылки все еще не запускает сборщик мусора. Тогда 'data' просто будет не только недоступным, но и недоступным дважды. – Bergi

+0

@Bergi вы правы: http://perfectionkills.com/understanding-delete/ – basarat

Смежные вопросы