Удаляет ли объект DOM (в Javascript) утечку памяти, если к нему присоединено событие? - PullRequest
4 голосов
/ 08 июня 2010

Итак, если в javascript я создаю объект DOM на странице HTML и присоединяю прослушиватель событий к объекту DOM, после удаления DOM со страницы HTML, остается ли прослушиватель событий и вызывает утечку памяти?

  function myTest() {
     var obj = document.createElement('div');
     obj.addEventListener('click', function() {alert('whatever'); });
     var body = document.getElementById('body'); // assume there is a <div id='body'></div> already
     body.appendChild(obj);
  }

  // then after some user actions. I call this:
  function emptyPage() {
    var body = document.getElementById('body');
    body.innerHTML = '';  //empty it.
  }

Итак, объект DOM, <div> внутри body исчез. Но как насчет eventlistener? Я просто боюсь, что это приведет к утечке памяти.

Ответы [ 2 ]

2 голосов
/ 09 июня 2010

Печально то, что в W3C нет коллекции событий, в которой вы можете просмотреть все события, примененные к одному элементу. Вы можете сделать это вручную (то есть obj.Events = {}; obj.Events [type] = []; obj.Events [type] .push (fn) для каждого добавляемого события. Event [types] - это массив если у вас есть несколько функций, которые вы хотите запускать одновременно, вы можете удалить каждую из них по отдельности), а затем выполнить цикл по объекту obj.Events, чтобы удалить все события перед удалением объекта.

0 голосов
/ 08 июня 2010

JavaScript выполняет сборку мусора автоматически для вас.

Он может сразу освободить его или может подождать, когда наступит наилучший момент.Это зависит от реализации JavaScript.

Так что нет, это не приведет к утечке памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...