Это больше FYI , чем фактический ответ, но это также довольно интересно.
Из спецификации ядра W3C DOM (http://www.w3.org/TR/DOM-Level-2-Core/core.html):
Базовые API-интерфейсы DOM разработаны для совместимости с широким спектром языков, включая языки сценариев общего назначения и более сложные языки, используемые в основном профессиональными программистами. Таким образом, API DOM должны работать с различными философиями управления памятью, от языковых привязок, которые вообще не предоставляют пользователю управление памятью, до тех (в частности, Java), которые предоставляют явные конструкторы, но предоставляют механизм автоматической сборки мусора для автоматического вернуть неиспользуемую память тем (особенно C / C ++), которые, как правило, требуют от программиста явного выделения памяти объекта, отслеживания ее использования и явного освобождения для повторного использования. Чтобы обеспечить согласованный API на этих платформах, DOM вообще не решает проблемы управления памятью, а оставляет их для реализации. Ни одна из явных привязок языка, определенных API-интерфейсом DOM (для ECMAScript и Java), не требует каких-либо методов управления памятью, но привязки DOM для других языков (особенно C или C ++) могут требовать такой поддержки. За эти расширения будут отвечать те, кто адаптирует API DOM к конкретному языку, а не рабочую группу DOM.
Другими словами: управление памятью оставлено для реализации спецификации DOM на разных языках. Вам нужно будет заглянуть в документацию по реализации DOM в javascript, чтобы найти любой метод удаления объекта DOM из памяти, который не является хакерским. (Однако на сайте MDC очень мало информации по этой теме.)
Как примечание по jQuery#remove
и jQuery#empty
: из того, что я могу сказать, ни один из этих методов не делает ничего, кроме удаления Object
s из DOM node
s или удаления DOM node
s из document
. Они только удаляют Это, конечно, не означает, что этим объектам не выделена память (даже если их больше нет в document
).
Редактировать: Вышеприведенный отрывок был излишним, поскольку очевидно, что jQuery не может творить чудеса и обходить реализацию DOM используемого браузера.