防抖、节流


函数防抖是指在事件被触发 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。这可以使用在一些点击请求的事件上,避免因为用户的多次点击向后端发送多次请求。
函数节流是指规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。节流可以使用在 scroll 函数的事件监听上,通过事件节流来降低事件调用的频率。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 // //防抖
function debounce(fn, date) {
 let timer  //声明接收定时器的变量
 return function (...arg) {  // 获取参数
   timer && clearTimeout(timer)  // 清空定时器
   timer = setTimeout(() => {  // 生成新的定时器
     //因为箭头函数里的this指向上层作用域的this,所以这里可以直接用this,不需要声明其他的变量来接收
     fn.apply(this, arg) // fn()
  }, date)
}
}
//--------------------------------
// 节流
function debounce(fn, data) {
 let timer = +new Date()  // 声明初始时间
 return function (...arg) { // 获取参数
   let newTimer = +new Date()  // 获取触发事件的时间
   if (newTimer - timer >= data) {  // 时间判断,是否满足条件
     fn.apply(this, arg)  // 调用需要执行的函数,修改this值,并且传入参数
     timer = +new Date() // 重置初始时间
  }
}
}