Подтвердить что ты не робот

Javascript: document.createElement('') & delete DOMElement

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

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

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

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

Мне просто интересно:)

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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