函数节流与函数防抖

什么是函数节流

打个很形象的比喻来说,函数节流就相当于技能CD,没CD完技能怎么也放不出,CD完之后你随时可以放。

函数节流:

var cd = ture
button.onclick = ()=> {
  if(cd){
    fn()
    cd = false
    setTimeout(()=> {
      cd = ture
    },1000)
  }
}

然后把它封装成函数

 function throttle(fn, delay){
     let cd= true
     return function(){
         if(cd){
             fn.apply(this, arguments)
             cd= false
             setTimeout(()=>cd= true, delay)
         }
     }
 }

什么是函数防抖

函数防抖,就相当于给中了debuff,在中一次就重新刷新debuff持续时间,只有持续时间内没有再吃debuff才能消失。

函数防抖:

var debuff = null
button.onclick = ()=> {
  if(debuff){
    window.clearTimeout(debuff)
  }
  debuff = setTimeout(()=> {
    fn()
    debuff = null
  },10000)
}

同样把它封装成函数

function debounce(fn, delay){
     let debuff = null
     return function(){
         if(debuff ){
             window.clearTimeout(debuff )
          }
         debuff = setTimeout(()=>{
             fn.apply(this, arguments)
             debuff = null
         },delay)
     }
 }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是函数节流与函数防抖? 举个例子,我们知道目前的一种说法是当 1 秒内连续播放 24 张以上的图片时,在人眼的...
    李轻舟阅读 1,307评论 0 11
  • 函数节流 限制一个函数在一定时间内只能执行一次。就像玩lol的释放技能,每个技能都有CD,当技能处于CD时,无法释...
    E1FANG阅读 131评论 0 0
  • 我们在一个项目中按钮连续多次点击,会造成一些问题,比如连点按钮会造成多次push页面,或者造成多次网络请求。那么就...
    Da_Yao阅读 130评论 0 0
  • 引用前人博客内容 《JavaScript高级程序》中关于函数节流概念的错误,本人也非常赞同作者关于写博客的态度。另...
    hencins阅读 148评论 0 1
  • 概念 原文地址 函数防抖(debounce) 当调用动作过n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则...
    你在我记忆里阅读 360评论 0 0