前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是防抖和节流?有什么区别?如何实现?

什么是防抖和节流?有什么区别?如何实现?

作者头像
小梦 over
发布2023-02-01 09:39:46
3090
发布2023-02-01 09:39:46
举报
文章被收录于专栏:若梦博客.

什么是防抖

防抖策略(debounce)是当事件被触发后,延迟 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时

fangdou
fangdou

代码示例

代码语言:javascript
复制
let timer = null    // 创建一个标记用来存放定时器的返回值
return function () {
    // 每当用户输入的时候把前一个 setTimeout clear
    clearTimeout(timer)
    // 然后又创建一个新的 setTimeout, 这样就能保证 initial 间隔内如果时间持续触发,就不会执行 fn 函数
    timer = setTimeout(() => {
        fn.apply(this, arguments)
    }, 500)
}

什么是节流

节流策略(throttle),顾名思义,可以减少一段时间内事件的触发频率。

202209111315973.webp
202209111315973.webp

代码示例

代码语言:javascript
复制
let canRun = true   // 通过闭包保存一个标记
return function () {
    // 在函数开头判断标记是否为 true,不为 true 则 return
    if (!canRun) return
    // 立即设置为 false
    canRun = false
    // 将外部传入的函数的执行放在 setTimeout 中
    setTimeout(() => {
        // 最后在 setTimeout 执行完毕后再把标记设置为 true (关键)表示可以执行下一次循环了
        // 当定时器没有执行的时候标记永远是 false,在开头被 return 掉
        fn.apply(this, arguments)
        canRun = true
    }, 500)
}

总结和区别

防抖:如果事件被频繁触发,防抖能保证只有最有一次触发生效!前面 N 多次的触发都会被忽略!

节流:如果事件被频繁触发,节流能够减少事件触发的频率,因此,节流是有选择性地执行一部分事件!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是防抖
  • 什么是节流
  • 总结和区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档