/**
 * @param {Function} fn
 * @param {number} t
 * @return {Function}
 */
var throttle = function(fn, t) {
  let on_cooldown = false;
  let queuedArgs = null;

  const handler = () => {
    if (queuedArgs === null) {
      on_cooldown = false;
      return;
    }

    fn.apply(null, queuedArgs);
    queuedArgs = null;
    on_cooldown = true;

    setTimeout(handler, t);
  };

  return function(...args) {
      queuedArgs = args;
      if (!on_cooldown) {
          handler();
      }
  }
};

/**
 * const throttled = throttle(console.log, 100);
 * throttled("log"); // logged immediately.
 * throttled("log"); // logged at t=100ms.
 */