# 函数防抖

定义:某个函数被调用后过了 n 秒才真正开始执行,如果在 n 秒内又被调用了。那么重新计算时间

# 标准版

function debounce(func, wait) {
  let timout;
  return function() {
    const context = this
    const args = [...arguments]
    if (timout) {
      clearTimeout(timout)
    }
    timout = setTimeout(() => {
      func.apply(context, args)
    }, wait)
  }
}

debounce(() => {
  console.log(1) // 秒后输出 1
}, 1000)()

# 立即执行版

function debounce(func, wait) {
  let timout;
  let isFirst = false;
  return function() {
    const context = this;
    const args = [...arguments];
    if (timout) {
      clearTimeout(timout);
    }
    timout = setTimeout(() => {
      func.apply(context, args);
    }, wait)
    if (isFirst === false) {
      func.apply(context, args);
      isFirst = true;
    }
  }
}

var d = debounce(() => {
  console.log(1)
}, 1000)
d() // 1 立即执行
d()
d() // 1
上次更新: 10/20/2020, 1:19:52 AM