Как работает этот код?

function debounce(f, ms) {

  var state = null;

  var COOLDOWN = 1;

  return function() {
    if (state) return; //Интересует этот момент

    f.apply(this, arguments);

    state = COOLDOWN;

    setTimeout(function() { state = null }, ms);
  }

}

function f(x) { alert(x) }
var f = debounce(f, 1000);

f(1);
f(2);
setTimeout( function() { f(3) }, 100); 
setTimeout( function() { f(4) }, 1100); 
setTimeout( function() { f(5) }, 1500);


Почему анонимная функция возвращается, если state всегда равен null? Если не всегда, то как он изменился и как браузер прошёл дальше return? Почему f(2), f(3) и f(5) не выполняются? Разве не должна функция f(1) выполнится и за ней f(2), f(3) и так далее?
  • Вопрос задан
  • 210 просмотров
Решения вопроса 1
shcherbanich
@shcherbanich
Программист
Вот Вы говорите state что равен NULL, так логично что мы не попадаем в условие if (state) return; так как NULL в данном случае это ложь.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Это примитивнейшая реализация врапера debounce, который не позволяет вызывать обернутую функцию чаще заданного времени
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы