Это называется закрытие Javascript и является ожидаемой функцией Javascript. Это не утечка памяти в любом современном браузере.
Если элемент DOM, представленный element
, удаляется из DOM, тогда обработчик onclick будет собираться мусором, а затем сам сбор будет собираться мусором.
В течение срока службы element
переменные a
и b
будут частью закрытия. Это ожидаемая языковая функция, поскольку они являются частью замыкания, которое создает этот код. Когда и если, element
удаляется из DOM, и это сбор мусора, закрытие и его ссылки a
и b
также будут иметь право на сбор мусора.
Есть несколько старых браузеров, которые не всегда справлялись с этим должным образом, но это, как правило, больше не рассматривается как дизайн для современных браузеров. Кроме того, это только вызвало проблему, если вы запускали такой код снова и снова (каждый раз удаляли элементы DOM), так что достаточно большой объем памяти потреблялся вещами, которые не собирались мусором, когда они должны были быть , Обычно это происходит только в приложениях с одной страницей, в которых много динамических материалов DOM. Но, как я уже говорил с современными браузерами, это уже не проблема, так как сборщик мусора браузера справляется с этой ситуацией сейчас.
Так что эта категория проблем (создание круговых ссылок на объекты) больше не является проблемой? Я предполагаю, что сборщики мусора могут обнаружить «острова» объекта-графа? – Ben
Подробнее о "круговых ссылках на объекты" можно найти здесь: http://javascript.info/tutorial/memory-leaks –
@BenAston Исправить. Технология продвинулась вперед; современные среды выполнения JS могут обнаруживать и собирать круглые ссылки. – duskwuff