Подтвердить что ты не робот

Причина очистки интервала перед выгрузкой окна?

Я заметил в нескольких библиотеках JavaScript, которые используют setInterval, что библиотека свяжет прослушиватель событий с событием window unload, чтобы очистить все созданные интервалы, используя clearInterval.

Одним из примеров является History.js, который сохраняет Список интервалов, которые должны быть удалены при выгрузке документа.

Отрывок:

// ====================================================================
// Interval record

/**
 * History.intervalList
 * List of intervals set, to be cleared when document is unloaded.
 */
History.intervalList = [];

/**
 * History.clearAllIntervals
 * Clears all setInterval instances.
 */
History.clearAllIntervals = function(){
    var i, il = History.intervalList;
    if (typeof il !== "undefined" && il !== null) {
        for (i = 0; i < il.length; i++) {
            clearInterval(il[i]);
        }
        History.intervalList = null;
    }
};

Слушатель событий, который вызывает эту функцию в событии unload, добавляется здесь.

Отрывок:

/**
 * Clear Intervals on exit to prevent memory leaks
 */
History.Adapter.bind(window,"unload",History.clearAllIntervals);

Итак, мой вопрос: почему некоторые авторы JavaScript делают это? Кажется, что эти интервалы будут очищены автоматически, когда браузер покинет страницу (я никогда не видел, чтобы это делалось иначе). Есть ли преимущество в этом? Это компенсирует ошибку браузера? Если да, то какая ошибка и какие браузеры это влияет?

4b9b3361

Ответ 1

Как упоминалось в комментариях, этот код был добавлен в History.js для совместимости с Env.js.

Env.js - это безгласный браузер, написанный на JavaScript, который больше не находится в активной разработке. Так что это, безусловно, крайний случай. Я предполагаю, что эта проблема вызвана ограничением самого JavaScript.

Пользователь Lance Leonard указал в комментариях, что существует проблема возможной утечки памяти в IE 10.