防抖与节流

129 阅读1分钟

1、节流

在工作中常见的一个场景,input输入框输入完成后,会发起搜索请求,因此我们可以规定好一个时间比如500ms就可以发起以此请求,因此在这500ms中你不能在发起请求,就像有一个定时阀门一样,到点才打开,因此将这样方式叫做节流,一句话总结:

 //节流就是「技能冷却中」
const throttle = (f, time) => {
  let timer = null
  return (...args) => {
    if(timer) {return}
    f.call(undefined, ...args)
    timer = setTimeout(()=>{
      timer = null
    }, time)
  }
}

2、防抖

防抖就像是游戏里面的回城,触发回城只算最后一次,不停触发就打断回城,重新计时;常用场景:手机号邮箱的输入检测

const debounce = (fn, time) => {
  let 回城计时器 = null
  return (...args)=>{
    if(回城计时器 !== null) {
      clearTimeout(回城计时器) // 打断回城
    }
    // 重新回城
    回城计时器 = setTimeout(()=>{
      fn.call(undefined, ...args) // 回城后调用 fn
      回城计时器 = null
    }, time)
  }
}