/**
 * 防抖函数
 * @param {Function} fn 需要防抖的函数
 * @param {Number} delay 延迟时间，单位毫秒
 * @param {Boolean} immediate 是否立即执行
 * @returns {Function} 返回防抖处理后的函数
 */
export function debounce(fn, delay = 500, immediate = false) {
  let timer = null
  let isInvoke = false

  return function(...args) {
    if (timer) clearTimeout(timer)

    if (immediate && !isInvoke) {
      fn.apply(this, args)
      isInvoke = true
    } else {
      timer = setTimeout(() => {
        fn.apply(this, args)
        isInvoke = false
        timer = null
      }, delay)
    }
  }
} 