手写函数节流

475 阅读1分钟

刚写了函数防抖,再来个函数节流

首先有同学问了:

防抖和节流有什么区别呢?

防抖(debounce)

    指在时间n内,函数被触发多次,但是只执行一次,执行最新的触发。也就是在时间n内,碰到新的触发,就清除之前的,重新计时。

节流(throttle)

            当持续触发某个事件时候,会有规律的每隔时间n就执行一次

节流详细解释下 预定一个函数只有在大于等于执行周期时才执行,周期内调用不执行,就是说一个程序执行需要1秒,开始执行后你在0.5s处,再次触发这个函数执行,是无效的。但当过了1s后,你在1.5s时候触发了一下,是可以执行的,而你刚才0.5s的触发是无效操作。

防抖前前篇文章已经实现了,那么节流呢?


版本1:
function throttle(fn, wait) {
    let prev = new Date();
    return function() {
        const args = arguments;
        const now = new Date();
        if(now - prev > wait) {
            fn.apply(this, args);
            prev = new Date();
        }
    }
}

版本2

function throttle(fn,delay) {
    var lastTime = 0;
    return function () {
        //记录当前函数
        var nowTime = new Date().getTime()
        //当前时间减去上一次执行时间才让他触发这个函数
        if(nowTime - lastTime > delay) {
            //绑定this指向
            fn.call(this)
            //同步时间
            lastTime = nowTime;
        }
    }
}

扫码加群