防抖和节流

106 阅读1分钟

防抖和节流

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

解决问题:用户触发时间过于频繁,只要最后一次时间的操作单位

节流: 高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率。

解决问题:控制高频事件的执行次数

//防抖函数
function debounce (fn, delay) {
    let t = null;
    return function() {
        if( t !== null) {
            clearTimeout(t);
        }
        t = setTimeout(() => {
            fn.call(this)
        }, delay)
    }
}

//节流函数
function throttle(fn, delay) {
    let flag = true;
    return function(){
        if(flag) {
            setTimeout(() => {
                fn.call(this);
                flag = true;
            })
            flag = false
        }
    }
}