函数节流和防抖

199 阅读1分钟

函数节流和防抖(常用于对dom绑定事件的回调进行触发频率控制)

节流

回调事件只在指定的时间间隔后触发,用于控制执行的频率

// 节流: 事件回调函数(fn)在指定间隔时间(timer)后触发
throttle (fn, timer) {
    let flag = true;
    return function () {
        if (!flag) return;
        flag = false;
        window.setTimeout(function () {
            fn.apply(this, arguments); // 改变this指针,执行回调函数
            flag = true;
        }, timer);
    };
};


fn1 () {
    cnsole.log('aaa');
};

$(window).on('scroll', throttle(fn1,300));

典型应用场景:滚动加载,滚动时进行数据的动态加载,不希望每次scroll事件都执行回调,而是在滚动指定时间后执行回调。

防抖

只需要在最后一次触发时执行回调函数(用于在一定时间内没有触发事件的情况下执行)

// 防抖: 在指定时间(timer)内没有再次触发事件,则执行回调(fn)
        debounce (fn, timer) {
            let setTimeout = null;
            return function () {
                window.clearTimeout(setTimeout);
                setTimeout = window.setTimeout(function () {
                    fn.apply(this, arguments);
                }, timer);
            };
        },

典型应用场景: 希望在input输入智能推荐,在输入完毕300ms后无输入则执行事件。