什么都想学的小白菜 2023-04-21 11:02 采纳率: 87.5%
浏览 19
已结题

以很高的频率触发防抖函数,刚开始控制台不会输出内容,防抖函数是生效的,持续短暂的时间后就会发现控制台一直在输出内容,就是说明防抖函数在这个情况下失效了

以很高的频率触发防抖函数,刚开始控制台不会输出内容,防抖函数是生效的,持续短暂的时间后就会发现控制台一直在输出内容,就是说明防抖函数在这个情况下失效了,请问是为什么



```javascript
var btn = document.getElementById('btn');
        function debounce (fn, delay) {
            let timer = null
            return function () {
                // 在规定时间内再次触发会先清除定时器后再重设定时器
                // console.log(timer)
                clearTimeout(timer);
                timer = setTimeout(function () {
                    // console.log(this, timer)
                    fn.apply(this, arguments);
                }, delay);
            }
        }
        function fn () {
            console.log('防抖')
        }
        // 就是这一行
        btn.onclick = function () {
            debounce(fn, 3000)()
        }


```

  • 写回答

4条回答 默认 最新

  • 守时间的孤岛 2023-04-21 11:11
    关注

    该回答引用chatgpt:

    根据您提供的代码,问题出在这一行:

    
    btn.onclick = function () {
        debounce(fn, 3000)()
    }
    
    

    这里没有将防抖函数返回的函数保存下来,而是直接执行了一次,所以每次点击按钮的时候都会重新创建一个防抖函数并立即执行,而防抖函数的作用是在一定时间内不执行函数,如果频繁调用的话就相当于没有起到防抖的作用。

    可以将这一行代码修改为:

    
    btn.onclick = debounce(fn, 3000);
    

    这样,每次点击按钮时都会执行防抖函数返回的函数,而不是重新创建一个函数并立即执行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 已采纳回答 4月21日
  • 创建了问题 4月21日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效