关于防抖和节流的区别和实现

对于“防抖”和“节流”,之前以为这两个词是一个概念,翻了几篇文章特此写笔记整理一下。

防抖和节流的区别

防抖是...

我理解的防抖是,在事件被连续触发时,不进行处理,当事件不再被触发时,等待x秒后处理回调。如下图:

滚动的时候不会触发回调,而当滚动停止时,等待x秒,会打印“a”。


debounce.gif

而节流..

我理解的节流是,在事件被连续触发时,按照某种频率(每x秒执行一次)处理回调,如下图:

可见打印的频率不会随着滚动的速率的改变而改变,会按照指定的频率而触发回调。


throttle.gif

乞丐版实现

const container = document.getElementById('container')

// 防抖
function debounce(func, time) {
    let timer;
    return () => {
        clearTimeout(timer)
        timer = setTimeout(() => {
            func()
        }, time);
    }
}

// 节流
function throttle(func, time) {
    let timer;
    return () => {
        if (!timer) {
            timer = setTimeout(() => {
                func()
                timer = null
            }, time)
        }
    }
}

container.addEventListener('scroll', debounce(() => { console.log('a') }, 1000))

推荐两篇文章

  1. 说说 JavaScript 中函数的防抖 (Debounce) 与节流 (Throttle)
  2. [译] Throttle 和 Debounce 在 React 中的应用
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 最近和前端的小伙伴们,在讨论面试题的时候。谈到了函数防抖和函数节流的应用场景和原理。于是,想深入研究一下两者...
    youthcity阅读 23,663评论 5 78
  • 问题的引出 在一些场景往往由于事件频繁被触发,因而频繁地进行DOM操作、资源加载,导致UI停顿甚至浏览器崩溃。在这...
    Mica_马超阅读 2,319评论 0 2
  • 函数节流 还记得上篇文章中说到的图片懒加载吗?我们在文章的最后实现了一个页面滚动时按需加载图片的方式,即在触发滚动...
    柏丘君阅读 2,880评论 1 19
  • 摘要:JavaScript 中的函数防抖和节流是很常用的需求,前端面试也是频率比较高被问到的知识,本文就通过二者的...
    EnochQin阅读 1,277评论 0 5
  • 看朱光潜的文章《慢慢走,欣赏啊》里面有谈到人生和写作的某些默契。万物之理皆相通,虽然我还没有到足以评论人生的年龄,...
    心诚写作阅读 496评论 2 3