函数防抖和函数节流

37 阅读1分钟

函数防抖(debounce)

函数防抖,就是指触发事件后开始计时,在一个时间周期内只能执行一次,如果在这个时间周期内又触发了该事件,则会重新计算函数的执行时间

简单的说,当一个动作连续触发,只执行最后一次。

function debounce(fn, delay = 500) { 
    let timer = null;
    return function() { 
        if (timer) { 
            clearTimeout(timer);
        }
        timer = setTimeout(() => { 
            fn.apply(this, arguments);
            timer = null;
        }, delay);
    } 
}

函数节流(throttle)

函数节流,就是指触发事件后开始计时,在一个时间周期内只能执行一次,如果在这个时间周期内又触发了该事件,则不会重新计算函数的执行时间

简单的说,一个函数在限定的时间内最多执行一次。

function throttle(fn, delay = 500) {
    let timer = null;
    return function() {
        if (timer) {
            return;
        }
        timer = setTimeout(() => {
            fn.apply(this, arguments);
            timer = null;
        }, delay)
    }
}