debounce

by Artem

JavaScript

'use strict';

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); // 1, выполнится сразу же
f(2); // игнор

setTimeout(function() {
  f(3)
}, 100); // игнор (прошло только 100 мс)
setTimeout(function() {
  f(4)
}, 1100); // 4, выполнится
setTimeout(function() {
  f(5)
}, 1500); // игнор