Javascript: документ.createElement (") & удалить DOMElement

Если вы создаете элемент внутри функции, например:

function makeDomElement()
{
   var createdElement = document.createElement('textarea');
}

и вы не добавляете его нигде в DOM, т. е. через .функции appendChild, он все еще остается в памяти? Так что вам придется сделать

function makeDomElement()
{
   var createdElement = document.createElement('textarea');
   delete createdElement;
}

мне просто любопытно :)

2 ответов


Он будет отличаться от браузера к браузеру, однако javascript delete ключевое слово не имеет ничего общего сcreateElement метод. Нет необходимости использовать delete.

что произойдет, так это то, что ссылка на элемент в настоящее время хранится в createdElement будут собирать мусор. Теперь в случае IE это будет означать, что элемент будет иметь свой счетчик ссылок, уменьшенный до 0, поэтому он уничтожит себя и освободит свою память. Другие браузеры обычно делают все по-другому элементы в DOM сами являются объектами, собранными мусором, и будут удалены во время того же (или, возможно, определенного DOM) цикла GC.

если бы элемент был добавлен в документ, то в случае IE была бы добавлена еще одна ссылка на элемент, поэтому, когда ссылка в createdElement удаляется объект элемента по-прежнему будет иметь ненулевой счетчик ссылок и продолжать существовать.

в случае других браузеров, где сами элементы являются мусором собранный элемент не будет собран, так как коллектор увидит его на графике объектов, связанных с документом.


после завершения функции больше нет ссылки на объект, т. е. если сборщик мусора работает правильно, он должен быть собран (есть ошибка IE, которая предотвращает сборку объектов с круговыми ссылками, если задействованы узлы DOM).

кроме того, ваш код сломан, поскольку локальные переменные не могут быть удалены: попытка сделать это даже вызовет синтаксическую ошибку в строгом режиме ES5.