详细讲解前端中的防抖函数

防抖函数用于优化性能,确保在高频事件如按钮点击或滚动时,函数不会频繁执行。其基本思路是取消前一次延迟调用并在最后一次事件触发后n秒执行。文章通过示例展示了如何创建一个防抖函数,用于input输入事件,防止连续输入时的频繁触发。
摘要由CSDN通过智能技术生成

防抖函数是一种在高频事件触发后,n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间的函数。这种函数在处理一些需要高频触发DOM事件的地方非常有用,例如按钮点击,滚动条滚动等。

防抖函数的基本实现思路是这样的:

1. 每次触发事件时都取消之前的延时调用方法
2. 然后重新设置一个新的延时调用

这样的话,如果在一个事件被频繁触发的情况下,该方法只会在最后一次事件触发后的n秒才会执行。
 

        let input = document.querySelector('input');  //获取input标签
        function output() {
            console.log(input.value);
        }
        function debonce(func, delay) {
            let timer;
            return function () {
                clearTimeout(timer);
                timer = setTimeout(() => {
                    func.call(this)
                }, delay)
            }
        }
        input.addEventListener('input', debonce(output, 2000));

这个防抖函数接收两个参数:func是需要防抖的函数,delay是延时的时间。函数内部定义了一个变量timer,用来保存定时器的id。

这个防抖函数返回了一个新的函数。当这个新的函数被调用时,它首先会清除当前的定时器(如果存在的话),然后设置一个新的定时器,在delay毫秒后执行func函数。

这里的setTimeout函数中,func.call(this)确保了func函数在执行时this的指向。this在这里指的是调用防抖函数的上下文。因为setTimeout是window对象的方法,如果直接调用func(),那么func内部的this会指向window。通过使用call方法,我们可以将this的指向改为原来的上下文。

例如,如果我们在一个对象的方法中使用了这个防抖函数,那么this就会指向这个对象。这样我们就可以在func函数中正确地访问这个对象的属性和方法。

总结一下,这个防抖函数的运行过程是这样的:

1. 调用防抖函数,传入需要防抖的函数func和延时时间delay。
2. 防抖函数返回一个新的函数。
3. 当新的函数被调用时,清除当前的定时器,并设置一个新的定时器,在delay毫秒后执行func函数。
4. 如果在delay毫秒内,新的函数被再次调用,那么清除当前的定时器,并重新设置定时器。
5. 只有在最后一次调用新的函数后的delay毫秒后,func函数才会被执行。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值