当我运行此代码时,我在控制台中看不到任何控制台日志。 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 );
这是预期的行为还是我错过了什么?
答案 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 )();