为什么 debounce 函数不执行该方法?

Why isn't debounce function executing the method?

当我运行这段代码时,我没有在控制台中看到任何控制台日志。 debounce 方法(取自here)是否根本不执行该方法?

function debounce(func, wait, immediate) {
    var timeout;
    var args = Array.prototype.slice.call(arguments, 3);
    return function () {
        var context = this;
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(function () {
            timeout = null;
            if (!immediate) {
                func.apply(context, args);
            }
        }, wait);
        if (callNow) func.apply(context, args);
    };
};

var f1 = function(){ console.log(1) }; 
var f2 = function(){ console.log(2) };  
debounce( f1, 100, false ); 
debounce( f2, 100, false );    

这是预期的行为还是我错过了什么?

那是因为你的 debounce 函数 returns 另一个函数。你必须这样称呼它:

debounce( f1, 100, false )(); 
debounce( f2, 100, false )(); 

function debounce(func, wait, immediate) {
    var timeout;
    var args = Array.prototype.slice.call(arguments, 3);
    return function () {
        var context = this;
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(function () {
            timeout = null;
            if (!immediate) {
                func.apply(context, args);
            }
        }, wait);
        if (callNow) func.apply(context, args);
    };
};

var f1 = function(){ console.log(1) }; 
var f2 = function(){ console.log(2) };  
debounce( f1, 100, false )(); 
debounce( f2, 100, false )();