怎样用闭包+定时器实现节流

需求一:

希望点击 Button 按钮立即打印 '节流' ,并且1s以内再次点击不生效

需求二:

希望点击 Button 按钮1s后打印 '节流' ,并且1s以内多次点击只会打印一次

自己用全局变量写的可以实现,但是希望能用闭包来实现,防止全局污染,大佬们帮忙写下啊

阅读 1.2k
1 个回答

简单的节流阀:

const throttle = {
    pool: new Map(),
    run(func, delay = 1000) {
        if (this.pool.get(func)) return;
        this.pool.set(func, true);
        console.log("节流");
        func.call(this);
        setTimeout(() => {
            console.log("节流2");
            this.pool.delete(func)
        }, delay);
    }
}

const test = () => {
    console.log("test");
}

throttle.run(test);
throttle.run(test);
throttle.run(test);
throttle.run(test);
throttle.run(test);
throttle.run(test);

最终输出:

节流
test
节流2
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题