Javascript的防抖/限流

本文深入探讨了JavaScript中的两种函数优化技术——防抖与限流。防抖函数确保在设定的时间间隔内,只执行最后一次调用,而限流函数则保证在特定时间间隔内执行一次函数,即使有多个快速连续调用。通过示例代码展示了这两种技术的工作原理及其区别,适用于优化频繁触发的事件处理,如按钮点击或滚动事件。
摘要由CSDN通过智能技术生成

1、防抖

function lazyFunction(fn, timeout){
    var timer = 0;
    return function(){
        if(timer) window.clearTimeout(timer);
        var args = arguments, that = this;
        timer = window.setTimeout(function(){
            fn.apply(that, args)
        }, timeout);
    };
}
var func = lazyFunction(function(name){
        console.log(name);
    }, 500);
 
    func('test1');
    func('test2');
    func('test3');
    func('test4');
    //每调用一次,都重置timer,设置新的timeout,在timeout时间内,连续执行,只执行最后一个超过timeout的方法
    //这里只有func('test4');会被执行正常输出结果

2、限流

function limitFunction(fn, timeout){
    var last_exec = 0;
    return function(){
       var now = +new Date();
       if(now - last_exec < timeout) return;
        last_exec = now;
        fn.apply(this, arguments);
    };
}
var func = limitFunction(function(name){
        console.log(name);
    }, 500);
 
    func('test1');
    func('test2');
    setTimeout(function(){
        func('test3');
    }, 600);
    //这里func('test2')不会被执行

至于这两个方法的区别,直观点:
分别用两个方法封装到func,然后鼠标一直点一个按钮执行func。
1、对于防抖,被封装的方法可能永远不会被执行。
2、对于限流,被封装的方法第一次会被执行,然后每当距上次执行时间间隔超过timeout后会被执行一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Anlige

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值