JavaScript·函数节流与函数防抖

作者 : jamin 本文共753个字,预计阅读时间需要2分钟 发布时间: 2020-10-18 共979人阅读

函数节流与函数防抖

函数节流(throttle)与函数防抖(debounce)核心思想都是通过限制函数调用来实现性能优化,但两者概念却有不同:

  • 函数节流:函数按指定间隔调用,限制函数调用频率
  • 函数防抖:一定时间段连续的函数调用,只让其执行一次

两者的使用场景也有不同:

  • 函数节流:页面滚动事件监听(scroll)、DOM 元素拖拽(mousemove)、键盘事件(keydown)
  • 函数防抖:文本输入验证发送请求、窗口缩放(resize)

函数节流

函数节流可以通过设置两个时间戳来实现,通过比较两个时间戳,让其在一定时间间隔内只执行一次,然后将时间戳重置为这次执行的时间,实现代码如下:

function throttle(func, delay) {
  let lastCall = new Date()
  return function(...args) {
    const now = new Date()
    if (now - lastCall < delay) {
      return
    }
    lastCall = now
    return func.apply(this, args)
  }
}

loadsh.js 里的函数节流功能实现更为复杂,可以实现首调用和尾调用。这里不再细说,详情可以参考源码。

函数防抖

函数防抖可以通过定时器来实现,还可以设置第一次触发时是否立即执行:

function debounce(func, wait, immediate = false) {
  let timeout
  return function(...args) {
    clearTimeout(timeout)
    timeout = setTimeout(() => {
      func.apply(this, args)
    }, wait)
    // 是否立即执行一次任务
    if (immediate) {
      immediate = false
      func.apply(this, args)
    }
  }
}
本站所提供的部分资源来自于网络,版权争议与本站无关,版权归原创者所有!仅限用于学习和研究目的,不得将上述内容资源用于商业或者非法用途,否则,一切后果请用户自负。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源。如果上述内容资对您的版权或者利益造成损害,请提供相应的资质证明,我们将于3个工作日内予以删除。本站不保证所提供下载的资源的准确性、安全性和完整性,源码仅供下载学习之用!如用于商业或者非法用途,与本站无关,一切后果请用户自负!本站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。如有侵权、不妥之处,请联系站长以便删除!
金点网络-全网资源,一网打尽 » JavaScript·函数节流与函数防抖

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
是否提供免费更新服务?
持续更新,永久免费
是否经过安全检测?
安全无毒,放心食用

提供最优质的资源集合

立即加入 友好社区
×