函数防抖与节流

函数防抖与节流

函数防抖与节流是很相似的概念,但它们的应用场景不太一样。

函数防抖:

任务频繁触发的情况下,只有任务触发的间隔超过指定间隔的时候,任务才会执行。
实现思路:
通过闭包保存一个标记来保存 setTimeout 返回的值,每当用户输入的时候把前一个 setTimeout clear 掉,然后又创建一个新的 setTimeout,这样就能保证输入字符后的 interval 间隔内如果还有字符输入的话,就不会执行 fn 函数了。

function debounce(fn, interval = 300) {
    let timeout = null;
    return function () {
        clearTimeout(timeout);
        timeout = setTimeout(() => {
            fn.apply(this, arguments);
        }, interval);
    };
}

函数节流:

任务频繁触发的情况下,只有任务触发的间隔超过指定间隔的时候,任务才会执行。函数节流所做的工作就是每隔一段时间去执行一次原本需要无时不刻地在执行的函数。

有点像玩游戏时的技能冷却

    function fn(){}
    var cd = false;
    button.onclick = function(){
        if(cd){
        //冷却中
        console.log('技能冷却中')
        }else{
            fn()
            cd = true
            //timerID在三秒后变为false 可以调用 fn
            var timerID = setTimeout(()=>{
            cd = false
           },3000)
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本篇课题,或许早已是烂大街的解读文章。不过春招系列面试下来,不少伙伴们还是似懂非懂地栽倒在(~面试官~)深意的笑容...
    以乐之名阅读 1,802评论 0 9
  • 在日常开发中,我们经常能够碰到以下工作场景: 对提交按钮进行变态的点击压力测试输入框内容的实时校验(譬如验证用户名...
    叫我小徐阅读 1,028评论 0 5
  • 之前实习的时候,我遇到了这么一个需求,搜索框实时发送请求,在做这个功能时我忽略了一个很严重的问题,我把处理请求的函...
    wangmu_mu阅读 456评论 0 1
  • 函数防抖与节流,网上的内容参差不齐,很容易弄混淆,本文不针对定义来说明什么是防抖,什么是节流,直接 show me...
    DCbryant阅读 614评论 0 0
  • 函数节流和防抖在前端开发中应用广泛,例如:函数防抖可以用于对用户输入的自动补全操作、函数节流可以用于对用户浏览行为...
    大雄的学习人生阅读 730评论 0 1