debounce中的超时变量如何工作?

时间:2014-03-21 02:03:40

标签: javascript

点击时多次调用

jQuery("#elementid").click( _.debounce( somefunction , 1000 ) );

调用_.debounce时多次点击之间如何共享超时?

_.debounce = function(func, wait, immediate) {
    var result;
    var timeout = null;
    return function() {
        var context = this, args = arguments;
        var later = function() {
            timeout = null;
            if (!immediate) result = func.apply(context, args);
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        if (callNow) result = func.apply(context, args);
        return result;
    };
};

1 个答案:

答案 0 :(得分:0)

_.debounce = function(func, wait, immediate) {
    var result;
    var timeout = null;
    return function() { /*returned function
*/ 
} }

注意在返回函数之外声明超时和结果变量的位置。返回的函数会记住定义它的上下文,它被称为闭包。

http://en.wikipedia.org/wiki/Closure_(computer_programming)

因此每次返回的函数调用超时时,它都将是闭包中声明的超时。