export function debounceThrottle() {
  // 防抖
  function debounce(fn: any, delay: number) {
    let timer: any = null
    return function () {
      // 保留调用时的this上下文
      const context = this
      // 保留调用时传入的参数
      const args: any = arguments
      // 每次事件被触发时，都去清除之前的旧定时器
      clearTimeout(timer)
      // 设立新定时器
      timer = setTimeout(() => {
        fn.apply(context, args)
      }, delay)
    }
  }

  // 节流
  function throttle(fn: any, delay: number) {
    let timer: any = null
    return function () {
      // 保留调用时的this上下文
      const context = this
      // 保留调用时传入的参数
      const args: any = arguments
      if (timer) {
        return
      }
      timer = setTimeout(() => {
        fn.apply(context, args)
        timer = null
      }, delay)
    }
  }
  return {
    debounce,
    throttle
  }
}
