防抖、节流

67 阅读1分钟

在JavaScript中,防抖和节流是非常常见的,主要应用一些高频事件的触发

防抖 是在一段时间内,只取最后一次结果;使用场景:用于输入框在输入的时候模糊搜索,减少对服务器的高频请求。写一个防抖函数

/**
* fn: 执行函数
* wait:隔多久执行一次
*/
function fangDou(fn, wait){
  // 定义一个计时器
  let timer = null;  
  return function () {
     if (timer) {
        clearTimeout(timer)
     }
     timer = setTimeout(() => {
        fn()
     }, wait)
  }
}

节流 是指在一段时间内,只触发一次;使用场景:轮播图,写一个节流函数

/**
* fn: 执行函数
* wait: 时间
*/
function jieLiu(fn, wait) {
   let flag = true;
   return function () {
      if (flag) {
         flag = false;
         setTimeout(() => {
            // 改变this指向
            fn.apply(this);
            flag = true;
         }, wait)
      }
      
   }
}