防抖和节流

104 阅读1分钟

防抖:事件触发n秒后再执行回调,如果n秒内被再次触发,则重新及计时,比如浏览器上的模糊搜索

function debounce(fn, delay) {
    let timer = null;
    return function() {
        if(timer !== null) {
            clearTimeout(timer) //如果计时任务已经存在,并且又触发了相同的事件,则取消当前计时,重新计时
        }
        timer = setTimeout(() => fn.apply(this, arguments), delay)
    }
}

节流:事件连续触发,但n秒内只执行一次回调,比如:scroll,resize事件

function throttle(fn, time) {
    let t0 = 0;
    return function() {
    let t1 = new Date();
        if(t1-t0 > time) {
            fn.call(this,arguments)
            t0 = t1;
        }
    }
}