节流与防抖

116 阅读1分钟

节流与防抖

防抖是延迟执行,节流是间隔执行

节流函数是在每隔一段时间就执行一次,设定xxx秒后执行事件,如果时间到了就会执行函数并重置定时器;防抖是每次触发都会重置定时器,而节流是在时间结束后才会重置定时器。

举个例子解释上面这句话: 比如说你缩放窗口,会触发一个函数执行,如果一直进行此操作,节流就会是每隔50s(定时器设定的时间)执行一次,而防抖就会在最后一次缩放(也就是停止缩放)后的50s(定时器设定的时间)执行函数。

节流函数实现原理:

function throttle(func,wait){
  let timeout = null
  return function () {
    const context = this
    const args = arguments
    if(!timeout){
      timeout = setTimeout(()=>{
        timeout = null
        func.apply(context,args)
      },wait)
    }
  }
}

只要代码是周期执行的,都可考虑使用节流

防抖函数实现原理:

function debounce(func,wait){
  let timeout = null
  return function () {
    const context = this
    const args = arguments
    if(timeout) clearTimeout(timeout)
    timeout = setTimeout(()=>{
      timeout = null
      func.apply(context,args)
    },wait)
  }
}

应用场景:比如,搜索框搜索。如果在工作中想直接使用防抖和节流方法,可以使用 Lodash.js 插件(这个插件整合很多常用的工具方法)。