SOURCE

/**
 * 节流函数 限制函数在指定时间段只能被调用一次
 * 用法 比如防止用户连续执行一个耗时操作 对操作按钮点击函数进行节流处理
 */
function throttle(fn, wait, ...args) {
    let timer = null;
    return () => {
      if(!timer) {
        timer = setTimeout(() => {
          fn(args);
          timer = null;
        }, wait)
      }
    }
}
// 第一次就会执行
function throttle2(fn, wait, ...args) {
  let preTime = Date.now();
  return () => {
    let now = Date.now();
    if(now - preTime >= wait) {
      fn(args);
      preTime = now;
    }
  }
}


/**
 * 函数调用后不会被立即执行 之后连续 wait 时间段没有调用才会执行
 * 用法 如处理用户输入
 */
function debounce(fn, wait, ...args) {
  let timer = null;
  
  return () => {
    if(timer) {
      clearTimeout(timer);
		}
    timer = setTimeout(fn, wait, args);
  }
}

window.addEventListener('click', debounce((num)=> {
    console.log(num);
}, 1000, 1))
console 命令行工具 X clear

                    
>
console