какая польза от установки значения setTimeout в переменную и есть ли необходимость в clearTimeout

#javascript #jquery

#javascript #jquery

Вопрос:

мне было интересно, какая польза от установки setTimeout в переменную

 scroll_timer = window.setTimeout(function () { ... 
  

когда я могу просто использовать

 window.setTimeout(function () { ... 
  

и есть ли необходимость в clearTimeout на самом деле? строка 2

 $window.scroll(function () {
    window.clearTimeout(scroll_timer);
    scroll_timer = window.setTimeout(function () { // use a timer for performance
        if($window.scrollTop() <= top) // hide if at the top of the page
        {
            displayed = false;
            $message.fadeOut(500);
        }
        else if(displayed == false) // show if scrolling down
        {
            displayed = true;
            $message.stop(true, true).show().click(function () { $message.fadeOut(500); });
        }
    }, 100);
});
  

код из прокрутки вверх в jquery

Ответ №1:

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

 var timer = setTimeout(callback, 1000);
clearTimeout(timer);
  

Обратный вызов здесь не вызывается.

Ответ №2:

Если вам в другом месте кода нужно проверить, запущен ли таймер, тогда вы бы проверили, имеет ли scroll_timer значение null или нет.

Ответ №3:

В данном примере эффект заключается в «сбросе» времени ожидания.

Поскольку событие прокрутки может запускаться много раз, в конечном итоге через десятую долю секунды будет отображаться множество повторяющихся сообщений. Если второе событие прокрутки вызывается до запуска первого, мы отменяем первое и устанавливаем новый тайм-аут для запуска через десятую долю секунды после последнего события прокрутки.

Ответ №4:

Это позволяет вам отменить тайм-аут с помощью clearTimeout, как в ответе Яна.

Это полезно, если у вас есть события, например, щелчок мыши, которые запускают таймер, чтобы вы не получали несколько вызовов. Мы используем это, чтобы остановить скроллер Twitter от обновления onmouseover.