永康嘉持电器有限公司前端
小小儁爺
2025-06-13 a2bce22a3a4df5f4662c373e57c07fa4268aeee1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
export default function debounce(fn, interval = 500, immediate = false) {
  //fn为要执行的函数
  //interval为等待的时间
  //immediate判断是否立即执行
  var timeout; //定时器
 
  return function() { //返回一个闭包
    var context = this,
      args = arguments; //先把变量缓存
    var later = function() { //把稍后要执行的代码封装起来
      timeout = null; //成功调用后清除定时器
      if (!immediate) fn.apply(context, args); //不立即执行时才可以调用
    };
 
    var callNow = immediate && !timeout; //判断是否立即调用,并且如果定时器存在,则不立即调用
    clearTimeout(timeout); //不管什么情况,先清除定时器,这是最稳妥的
    timeout = setTimeout(later, interval); //延迟执行
    if (callNow) fn.apply(context, args); //如果是第一次触发,并且immediate为true,则立即执行
  }
}