首页IT科技防抖和节流是闭包吗(防抖和节流有什么区别?)

防抖和节流是闭包吗(防抖和节流有什么区别?)

时间2025-05-02 16:51:14分类IT科技浏览3681
导读:一、理解防抖和节流...

一           、理解防抖和节流

防抖:在单位时间内频繁触发事件            ,只有最后一次生效

比如:在游戏回城的时候被打断                ,再次点回城就会重新计时      ,最终只有没被打断的最后一次         ,才能成功回城                ,就是防抖

节流:在单位时间内频繁触发事件         ,只生效一次(也就是只有第一次生效)

比如:鼠标点击下一张轮播图      ,不管单位时间内连续点击了多少次                ,轮播图都是2秒换下一张            ,就是节流

防抖和节流都是性能优化的一种手段

二                  、相同点

1.都可以通过使用 setTimeout 来实现

2.都可以降低回调执行频率   ,节省计算资源

三     、不同点

1.定义不同

函数防抖:一段时间内连续触发事件                ,只执行最后一次

函数节流:一段事件内只执行一次

2.应用场景不同

防抖:(1)手机号        、邮箱地址的校验 (2)当用户input框输入完成后再发请求              ,如搜索等

节流: 高频事件,如:多少秒之后获取验证码                  、resize 事件和scroll 事件等

四        、代码实现

1.防抖:

<body>

  <input type="text" id="i">

  <script>

    // 1.防抖

    document.querySelector(#i).addEventListener(input, () => {

      debounce()

    })

    let timeId = null

    const debounce = () => {

      clearTimeout(timeId)

      timeId = setTimeout(() => {

        console.log("防抖最后一次输出");

      }, 1000)

    }

  </script>

</body>

 防抖实现效果:

2.节流:

<body>

   <input type="button" id="btn" value="获取验证码">

  <script>

// 2.节流

    let flag = true // 设置控制开关

    let timeId = null

    const inp = document.querySelector(#btn)

    inp.addEventListener("click", () => {

      if (!flag) {

        return

      }

      flag = false

      let s = 5

      timeId = setInterval(() => {

        s -= 1

        if (s < 1) {

          inp.value = 获取验证码

          flag = true

          s = 5

          clearInterval(timeId)

        } else {

          inp.value = s + 秒后再次获取验证码

        }

      }, 1000)

    })

  </script>

</body>

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
windown.location(window.location对象详解) 帝国CMS 不能生成静态(帝国cms如何安装网站模板)