节流防抖函数小记

3 篇文章 0 订阅

函数节流

1.高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率。
2.动作绑定事件,动作发生后一段时间后触发事件,在这段时间内,如果动作又发生,则无视该动作,直到事件执行完后,才能重新触发。
3.懒加载的时间需要监听浏览器的滚动条位置(不用 每次都去触发,只要降低计算的频率),做放大镜预览的时候监听鼠标移动位置的时候,以及抢购点击多次请求。

const throttle = (fn, delay) => {
      let last = 0
      return (...args) => {
          const now = +new Date()
          if(now - last > delay){
            fn.apply(this, args)
            last = +new Date()
          }
      }
  }

函数防抖

1.触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间
2.动作绑定事件,动作发生后一定时间后触发事件,在这段时间内,如果该动作又发生,则重新等待一定时间再触发事件。
3.实时搜索,拖拽,form 表单重复提交验证

const debounce = (fn, delay) => {
      return (...args) => {
        clearTimeout(fn.id)
        fn.id = setTimeout( ()=> {
          fn.call(this,args)
        }, delay)
      }
  }

箭头函数

1. 更简洁的函数
() => {
	console.log("hellow")
}
2. 没有单独的this

在箭头函数出现之前,每一个新函数根据它是被如何调用的来定义这个函数的this值:
如果是该函数是一个构造函数,this指针指向一个新的对象
在严格模式下的函数调用下,this指向undefined
如果是该函数是一个对象的方法,则它的this指针指向这个对象

3. 通过 call 或 apply 调用
4. 不绑定arguments

通过 …arguments 实现

call apply 区别

apply() 方法调用一个具有给定this值的函数,以及作为一个数组(或类似数组对象)提供的参数。
call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。

该方法的语法和作用与 apply() 方法类似,只有一个区别,就是 call() 方法接受的是一个参数列表,而 apply() 方法接受的是一个包含多个参数的数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们在JavaScript中处理一些频繁触发的事件时,比如窗口调整大小、滚动等,防抖函数节流函数可以帮助我们优化性能。 防抖函数(Debounce)是指在事件触发后等待一段时间后再执行回调函数,如果在等待时间内再次触发了该事件,则重新计时。这样可以避免频繁触发事件导致的性能问题。 以下是一个简单的JavaScript实现防抖函数的例子: ```javascript function debounce(func, delay) { let timer; return function() { clearTimeout(timer); timer = setTimeout(func, delay); }; } ``` 在上面的例子中,`debounce`函数受两个参数:`func`是要执行的回调函数,`delay`是等待的时间间隔。返回的函数会在事件触发后等待`delay`毫执行回调函数节流函数(Throttle)是指在一定时间间隔内只执行一次回调函数,无论事件触发多频繁。这样可以控制事件的触发频率,避免过多的计算和渲染。 以下是一个简单的JavaScript实现节流函数的例子: ```javascript function throttle(func, delay) { let timer; return function() { if (!timer) { timer = setTimeout(() => { func(); timer = null; }, delay); } }; } ``` 在上面的例子中,`throttle`函数受两个参数:`func`是要执行的回调函数,`delay`是时间间隔。返回的函数会在事件触发后等待`delay`毫执行回调函数,但如果在等待时间内再次触发了该事件,则不会重新计时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值