去抖函数js

4 篇文章 0 订阅

去抖函数

 	debounce(func, delay) {
        let timer = null

        // 这个东西就是一个闭包 因该吧
        return function(...args) {
          // 如果有timer的话我们就会清除掉timer
          if( timer ) clearTimeout(timer)

          timer = setTimeout(() => {
            func.apply(this, args)
          }, delay);
        }
      }

调用

      const 防抖动函数包装 = this.debounce("想要防抖动的函数", 500)
      // 我们这个函数的返回值就是里面debounce返回的函数
      

   	  // 然后这里我们就可以高频率的调用对应的函数
      防抖动函数包装()

func 就是想要防抖动的函数 这个函数

我们第一次调用的时候它就会对timer进行赋值, 并且开始记时

第二次来到的时候我们还是调用的同一个返回的函数, 所以我们而timer这个变量是闭包函数中的变量, 对于返回的函数而言它就像一个全局变量

所以如果时间没有结束的话timer, 它就会清除上一次的记时, 然后重新开始记时

所以如果在延迟时间内没有计时结束它就会一直刷新计时


本来这个Timer是一个局部变量但是它很久都没有销毁

我们内部的闭包对外层的, 的变量做了一个引用这个时候这个函数作用作用域就没有销毁, 变量的引用依久存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值