深刻理解防抖和节流

本文详细介绍了JavaScript中的防抖(debounce)和节流(throttle)两种优化技术,通过实例解释了它们的区别和应用场景。防抖常用于输入框查询回调,确保在触发间隔结束后才执行函数;节流则常用于resize、scroll事件,限制函数在一定时间内仅执行一次。文中提供了两种实现方式,帮助开发者更好地理解和应用这两种技术。
摘要由CSDN通过智能技术生成

再也不用担心老是忘记两者的区别,总结一下,加深记忆。

防抖: debounce

函数被触发n秒后执行,n秒内如果再次被触发,则重新计时,一般常见于输入框的查询回调

// 利用定时器实现
export const debounce = (fn, delay) => {
  let timer = null
  return function () {
    const ctx = this
    if (timer) clearTimeout(timer)
    timer = setTimeout(() => {
      fn.apply(ctx, arguments)
    }, delay)
  }
}

假如提莫回城需要8s,8s内被技能打中,回城中断,只有在按下B键8s内未受到影响,才能顺利回城。

在这里插入图片描述

节流: throttle

在一定的时间内,无论触发多少次回调,只执行一次回调函数。一般用于resize、scroll事件中

利用Date.now()时间戳实现

// 执行头部,不执行尾部
export const throttle = (fn, delay) => {
  let time = Date.now()
  let curTime
  return function () {
    curTime = Date.now()
    if (curTime - time >= delay) {
      fn.apply(this, arguments)
      time = curTime
    }
  }
}

利用setTimeout()定时器实现

// 不执行头部,执行尾部
export const throttle = (fn, delay) => {
  let timer = null
  return function() {
    if(timer) return
    timer = setTimeout(() => {
      fn.apply(this, arguments)
      timer = null
    }, delay)
  }
}

提莫的Q技能CD为8s,那8s内无论按多少次键盘,也只能释放一次。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值