Сборщик мусора, используемый в кишках IE для работы с памятью, выделенной для / для DOM, не имеет представления о том, как освободить память, которая может свисать, выделенную движком JScript.Таким образом, он просто игнорирует такие вещи.
Таким образом, вы привязываете обработчик событий к элементу DOM (или что-то в этом роде), и ваш обработчик событий - это функция, созданная внутри вызова некоторой другой функции, и эта другаяФункция имеет локальный массив с миллиардом вещей, ну, эти миллионы вещей живут и работают еще долго после того, как сам элемент DOM заблокирован, и даже спустя долгое время после освобождения страницы , содержащей его (думаю, это было какое-то время).
function bindHandler(domElement) {
var hoHumWhatever = generateGiganticObjectNow();
domElement.onclick = function() {
alert("oww you clicked me");
};
}
Теперь, когда переменная "hoHumWhwhat" сохраняется в замыкании.Когда страница перезагружается или DOM изменяется таким образом, что элемент выбрасывается, сборщик мусора DOM не сможет ничего сделать с атрибутом, указывающим на память, принадлежащую JScript.JScript, с другой стороны, не знает, что узел DOM был освобожден, поэтому он считает, что память закрытия все еще используется.
Я допускаю, что в некоторых деталях это может быть неточным, но это основнойпроблема.Об этом писали разные люди, в том числе мистер Крокфорд и (я думаю) ppk в quirksmode.
edit - После более тщательного перечитывания кода, который вы опубликовали, яподумайте, что может быть примером подобного, но противоположного случая: маленькая функция возвращает ссылку на часть значения DOM, поэтому, возможно, кто-то говорит, что JScript будет зависать в памяти DOM (вместоVersa).Теперь, в данном конкретном случае, я немного сомневаюсь, потому что я не вижу, как что-либо «ускользает» от этого замыкания, кроме простой ссылки на атрибут DOM, который должен быть экземпляром примитивной строки и поэтому действительно не долженне вызывает проблемы.Однако эти вопросы могут быть обманчивыми, поэтому я просто сижу здесь и чешу голову.