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

时间:2017-03-21 09:22:36

标签: javascript function debouncing

当我运行此代码时,我在控制台中看不到任何控制台日志。 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 );    

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

1 个答案:

答案 0 :(得分:2)

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

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 )();