防抖节流

157 阅读1分钟

防抖

function debounce(fn, delay) {
// 声明变量timer
  let timer = null
  return function () {
  // 多次触发时,清除前一个定时器,保证只执行最后一个定时器
    if (timer) {
      clearTimeout(timer)
    }
    // 设置定时器
    timer = setTimeout(() => {
    // 将this指向从window修改为调用函数,同时将函数所有形参返还出去
      fn.apply(this, arguments)
    }, delay)
  }
}

节流

function throttle(fn, delay) {
// 声明变量timer用作开关
  let timer = null
  // return出一个函数用以写代码,增强扩展性
  return function () {
  // 如果timer正在定时器中,return函数,使定时器走完再执行下一次定时器
    if (timer) {
      return
    }
    // 设置定时器
    timer = setTimeout(function () {
    // 执行fn函数并重制timer值
      fn()
      timer = null
    }, delay)
  }
}