什么是节流、防抖函数?作用及应用场景?如何实现?

2020-01-14  本文已影响0人  我的昵称好听吗

函数防抖(debounce):

事件响应函数在一段时间后才会执行,如果在这段时间内再次调用,则重新计算执行时间;当预定时间内没有再次调用该函数,则执行响应逻辑。
如: 设置某个函数2s钟内只能执行一次,如果2s内实际触发了大于2次,则2秒内不会执行,会等到最后一次触发结束2s后执行;

函数节流(throttle):

可以理解为在函数防抖上多加了一个功能:函数节流会预定一个自动执行时间,到时自动执行一次。
如: 设置某个函数2s钟内只能执行一次,如果2s内实际触发了大于2次,那最多只能执行1次;

共同点:

函数节流与函数防抖都是为了限制函数的执行频次,是一种性能优化的方案,比如应用于window对象的resize、scroll事件,拖拽时的mousemove事件,文字输入、自动完成的keyup事件。

函数节流的应用场景(throttle)

function debounce(callback,delay) {

    var timer = null;

    return function () {

        var args = arguments;

        var that = this;

        clearTimeout(timer);
        timer = setTimeout(function () {

            callback.apply(that, args);

        }, delay);

    };
};

// 使用方式

function dd(){
    console.log('dd');
}
window.onresize = debounce(dd,500);

节流实现:

function throttle(callback,delay){

    var timerId = null;

    return function(){

        if (timerId) {

            return;
        }
        var args = arguments;

        var that = this;

        timerId = setTimeout(() => {

            timerId = null;

            callback.apply(that,args);
        }, delay);

    }
}
上一篇下一篇

猜你喜欢

热点阅读