什么都想学的小白菜 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日

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c