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.