SOURCE

// timestamp
function preThrottle(fn, wait = 100) {
	let prev = 0;
  return function(...args) {
  	let now = +new Date();
    if (now - prev > wait) {
      prev = now;
      fn.apply(this, args);
    }
  };
}

// setTimeout
function postThrottle(fn, wait = 100) {
  let timer = null;
  return function(...args) {
    if (!timer) {
      timer = setTimeout(() => {
        fn.apply(this, args);

        clearTimeout(timer);
        timer = null;
      }, wait);
    }
  };
}

function debounce(fn, wait = 100, immediate = false) {
  let timer = null;
  
  return function(...args) {
    clearTimeout(timer);
    
    if(!timer && immediate) {
      fn.apply(this, args);
    }
    
    timer = setTimeout(() => {
      fn.apply(this, args);
      clearTimeout(timer);
    }, wait);
  };
}
console 命令行工具 X clear

                    
>
console