前端常用方法——函数防抖节流(立即执行,非立即执行,时间节流,setTimeout节流 )

前端常用方法——函数防抖节流(立即执行,非立即执行,时间节流,setTimeout节流 )

场景

​ 函数防抖分为立即执行和非立即执行,立即执行是指开始立即执行一次,之后在指定时间后再执行才可以执行;非立即执行是指 执行过程中不执行,执行后过一段时间再执行

​ 函数节流是指根据间隔时间执行

​ 下面是其简易实现

防抖
// 非立即执行版
function debounce(fn,time) {
  let timer = null
  return function() {
    clearTimeout(timer)
    timer = null
    timer = setTimeout(() => {
      fn.apply(null)
    },time)
  }
}

// 立即执行版
function debounce2(fn,time) {
  let timer = null 
  return function() {
    if(timer) {
      clearTimeout(timer)
    }
    if(!timer) {
      fn.apply(null)
    }
    timer = setTimeout(() => {
      timer = null
    },time)
  }
}

// 利用setTimeout的特性+闭包来实现

// 调用
window.addEventListener('scroll',debounce(function() {
      console.log(1)
    },50))
    window.addEventListener('scroll',debounce2(function() {
      console.log(2)
    },1000))
节流
// 利用setTimeout 方法
function throttle(fn,time) {
  let timer = null
  return function() {
    if(!timer) {
      timer = setTimeout(() => {
        fn.apply(null)
        timer = null
      },time)
    }
  }
}

// 利用Date.now() 方法
function throttle2(fn,time) {
  let preTime = 0
  return function() {
    // 不加入该判断会立即执行一次
    if(!preTime) {
      preTime = Date.now()
      return 
    }
    if(Date.now() - preTime > 1000) {
      fn.apply(null)
      preTime = Date.now()
    }
  }
}
小结

​ 重新看了下这些方法,逻辑比之前理解的块,多看多记有很大帮助~

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值