欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

节流阀和去抖动的基本实现-个人文章-SegmentFault思否

程序员文章站 2022-08-31 12:26:20
节流阀throttle 触发的事件以周期的形式去执行,而非实时。如滴水的水龙头。 function throttle (fn, delay) { // 利用闭包变量时效性...

节流阀throttle

触发的事件以周期的形式去执行,而非实时。如滴水的水龙头。

function throttle (fn, delay) {
  // 利用闭包变量时效性
  let timeout
  let arg
  return function () {
    arg = arguments
    if (!timeout) {
      timeout = settimeout(() => {
        fn.apply(this, arg)
        timeout = null
      }, delay)
    }
  }
}
// demo
/*
var test = throttle(function (a) {console.log(a)}, 1000)
test(1) // 不执行
test(2) // 不执行
test(3)
=> 3
test = null // 不需要时释放内存
*/

去抖动debounce

事件最后一次触发的n毫秒后触发,如电梯门。

function debounce (fn, delay){
  let timeout
  return function(){
    const args = arguments
    cleartimeout(timeout)
    timeout = settimeout(() => {
      fn.apply(this, args)
    }, delay)
  }
}
// 用法同throttle