JavaScript 之 节流防抖

66 阅读1分钟

函数防抖(debounce)

函数防抖是指在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。

例如我们需要做一个实时查询的输入框,需要在用户停止输入就发送请求.当用户输入时会清除上一个还未执行的setTimeout,然后创建一个新的
setTimeout,这样如果用户一直输入的话,就不会执行fn函数

const debounce = (fn, interval = 300) => {
  let timer = null
  return function(){
    clearTimeout(timer)
    timer = setTimeout(()=>{
      fn.apply(this,arguments)
    },interval)
  }
}

函数节流(throttle)

函数节流是指规定一个时间,在这个时间内,只能有一次触发事件的回调函数执行,
如果在同一个时间内某事件被触发多次,只有一次能生效。

const throttle = (fn, interval = 300) => {
  let run = true
  return function () {
    if (!run) return
    run = false
    setTimeout(() => {
      fn.apply(this, arguments)
      run = true
    }, interval)
  }
}