节流 & 防抖

函数节流 throttle

指定时间间隔内只会执行一次任务

常用于滚动条滚动监听等

function throttle(fn, timehold) {
  let startTime = new Date().getTime();
  const context = this;

  return function() {
    const currentTime = new Date().getTime();
    if (currentTime - startTime >= timehold) {
      fn.apply(context, [...arguments]);

      startTime = currentTime;
    }
  };
}

函数防抖 debounce

任务频繁触发的情况下,只有任务触发的间隔超过指定间隔的时候,任务才会执行

即:用户在不触发事件时,才触发相应动作,以抑制本来在事件中要执行的动作。

常用于用户输入验证等

function debounce(fn, waitTime) {
  let timeout;

  return function() {
    clearTimeout(timeout);
    const args = arguments;
    timeout = setTimeout(() => {
      fn.apply(this, [...args]);
    }, waitTime);
  };
}