SOURCE

function throttle(fn, interval) {
    // 1. 用last记录上一次时间,初始化为0
    let last = 0
    return function () {
        // 2. 保存this和参数
        const context = this
        const args = arguments

        // 3. 记录当前时间,要转数字
        const now = +new Date()

        // 4. 如果时间差大于指定间隔,则用apply调用函数,同时重置上一次的时间
        if (now - last >= interval) {
            fn.apply(context, args)
            last = now
        }
    }
}

function debounce(fn, delay) {
    let timer = null
    return function () {
        // 2. 保存this和参数
        const context = this
        const args = arguments

        // 3. 如果已经有定时器,清除重新再建一个
        if(timer) {
            clearTimeout(timer)
        }

        // 4. 设定新的定时器,记得timer置空
        timer = setTimeout(()=>{
            fn.apply(context,args)
            timer = null
        },delay)
    }
}

// const betterScroll = throttle(() => {
//     console.log('滚动了')
// }, 1000)

const betterScroll = debounce(() => {
    console.log('滚动了')
}, 1000)


document.addEventListener('scroll', betterScroll)
body {
    height: 2000px;

}
console 命令行工具 X clear

                    
>
console