防抖函数和节流函数使用

1.使用场景(防抖函数)

当我们在项目中一段时间内需要反复调用同一个函数,为了提高效率,我们就可以使用防抖函数来减少调用同一个函数的次数,进而提高效率

(比如当我们在渲染详情页,我们需要获得组件挂载完后的组件内容高度,但当详情页中有图片时,虽然组件已挂载完毕,但图片的加载会有一定的延迟,故我们需要调用刷新函数来获得准确的页面内容高度,于是当一张图片加载完,我们就得调用一次刷新函数,这样当图片多的时候,降低了效率,这个时候就需要用到防抖函数来提高效率)

2.代码实现

// 参数func是 (需要反复调用的同一个函数)
// time是传入的毫秒数,指为定时器设置时间
// 这里的变量timer使用了闭包,使得timer的值被保存下来
export function debounce (func, time = 300) {
  let timer = null
  return function () {
    if (timer) {
      clearTimeout(timer)
    }
    timer = setTimeout(() => {
      // 将func的指向调用匿名函数的this指向,这里可以根据实际需要看是否需要改变this指向
      func.apply(this)
    }, time)
  }
}

3.节流函数

节流则是在指定时间内,最多只触发一次函数

a.利用闭包保存上一次函数调用的时间

b.判断当前时间与上一次调用时间的差值是否大于指定时间

function throttle(func,timer = 200){
    let lastTime = null;
    return function(){
      const now = Date.now();
      // 判断是否是第一次调用 或者 两次调用的时间间隔是否超过规定的间隔
      
      if(!lastTime || now - lastTime > timer){
        func.apply(this)
        lastTime = now
      }
    }
  }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值