简单封装个防抖和节流

防抖

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

节流

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

注:防抖和节流的写法其实差不多,只是当setTimeout存在时,防抖和节流执行的逻辑有差别。

防抖:触发高频事件时,在delay时间内函数最终只会执行一次,如果在delay时间内再次触发事件,则重新计算时间;
节流:触发高频事件时,稀释函数执行的频率

//fn.apply(this, arguments)是为了方便调用时传参用。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理