Время жизни объекта / обратного вызова JavaScript с событием onload - PullRequest
4 голосов
/ 15 декабря 2010

Сегодня вечером я кодирую галерею изображений, и это привело меня к философскому вопросу

Я создаю предварительно загруженный объект Image и устанавливаю для него событие onload

  ...  onmouseover = function() {
        preloadActive = true;
        imgPreload = new Image();

        imgPreload.onload = function() {
            preloadActive = false;
        }

        imgPreload.src = ...;
      }

Где imgPreload и preloadActive - глобальные переменные

Теперь представьте, что новый onmouseover() срабатывает до выполнения onload().

запускается строка кода, которая создает новый объект изображения, старый объект изображения теряет последнюю ссылку и переходит на Erebus, и ожидает, что сборщик мусора ее съест.

Вопрос идет здесь: Старый экземпляр объекта не уничтожается сразу. Его событие onload продолжает жить, никто не знает, как долго? У вас есть кросс-браузерный опыт?

Спасибо!

PS: меня не волнует IE6


PPS: Что произойдет, если у меня будет объект с setInterval ID таймаута внутри?

obj.someVar = setInterval(...)

setInterval остановился в тот самый момент, когда я выполняю

obj = {}

1 Ответ

4 голосов
/ 16 декабря 2010

Ну, для начала, глобальные переменные не подходят для сборки мусора (что обычно является причиной утечек памяти и является одной из многих причин избегать использования глобальных переменных все вместе).

Сказав это, пожалуйста, прочитайте эту статью Эрика Липперта. Это старое, но я все еще думаю, что это весьма актуально.

...