// 函数防抖
debounce(func, delay) {
    let timer = null
    return function () {
        clearTimeout(timer)
        timer = setTimeout(() => {
            func.apply(this, arguments);
        }, delay)
    }
},
// 第一次执行,之后防抖
debounceAdvanced(func, delay, immediate) {
    let timer;
    return function () {
        if (timer) clearTimeout(timer);
        if (immediate) {
            // 复杂的防抖函数
            // 判断定时器是否为空,如果为空,则会直接执行回调函数
            let firstRun = !timer;
            // 不管定时器是否为空,都会重新开启一个新的定时器,不断输入,不断开启新的定时器,当不在输入的delay后,再次输入就会立即执行回调函数
            timer = setTimeout(() => {
                timer = null;
            }, delay);
            if (firstRun) {
                func.apply(this, arguments);
            }
            // 简单的防抖函数
        } else {
            timer = setTimeout(() => {
                func.apply(this, arguments);
            }, delay);
        }
    };
}

借鉴CSDN,仅用作记录,方便翻阅
原文链接:https://blog.csdn.net/qq_63299825/article/details/130862307