防抖和节流的实现

159 阅读1分钟

1. 防抖

触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间

function debounce(fn, wait) {
    let timeout = null;
    
    return function() {
        clearTimeout(timeout);
        
        timeout = setTimeout(() => {
            fn.apply(this, arguments);
        }, wait)
    }
}

2. 节流

高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率。和防抖的区别在于,每次函数的调用最后都会执行,而防抖只会执行最后一次。

function throttle(fn, wait) {
    let onOff = true;
    
    return function() {
        if (!onOff) {
            return;
        }
        
        onOff = false;
        
        setTimeout(() => {
            fn.apply(this, arguments);
            
            onOff = true;
        }, wait)
    }
}