为什么 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 )();
当我运行这段代码时,我没有在控制台中看到任何控制台日志。 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 )();