闭包实现函数节流

在一些业务场景中我们可能会用到window.onresize事件或者mousemove等监控类型事件,当用户做出相关操作的时候,会平凡触发相应的函数,有可能每秒会触发几十甚至上百次,如果函数中有一些DOM操作,就会导致浏览器卡顿等现象,很多时候我们根本不需要执行这么多次,这时我们就需要用到函数节流把多余的执行函数请求给过滤掉

var throttle = function(fn,time){
    var self = fn,
        timer,
        firstTime = true;
    return function(){
        var args = arguments,
            _self = this;
        if(firstTime){ //第一次调用的时候不需要过滤
           self.apply(_self,args);
           return firstTime = false;
        };
        if(timer){ 
           return false;
        };
        timer = srtTimeout(function(){
            clearTimeout(timer);
            timer = null;
            self.apply(_self,args);
        },time || 500);
    };
};

利用延迟和闭包将多余的函数执行请求给过滤掉

window.onresize = throttle(function(){
    //函数逻辑
},300)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值