面试前的准备

前端复习之路-js的防抖与节流

2020-11-30  本文已影响0人  明眸yh

今天是一个美好的开始

每日一学,作为前端小白的我,励志提升js基础,从今日开始我的前端复习之路。

背景

频繁触发回调导致的大量计算会引发页面的抖动甚至卡顿。为了规避这种情况,我们需要一些手段来控制事件被触发的频率。就是在这样的背景下,throttle(事件节流)和 debounce(事件防抖)出现了。

事件防抖

在高频触发回调函数时,防抖操作使回调函数在一定时间间隔内,再次触发会清空定时器,并重新计时;计时结束后输出一次结果。

事件节流

在高频触发回调函数时,节流操作使回调函数在每隔一段时间定期执行一次,时间间隔内再触发,不会重新执行。

应用场景

共同点

相同点都是需要设置一个回调函数及周期时间,区别在于:

防抖实现:

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);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读