我正在研究有关去抖动解决方案的帖子:
我正在努力想到
的情况func.apply(context, arguments);
是必要的,而不仅仅是使用
func();
我认为99%的几率只会被用作一个功能。在什么情况下这将被附加到一个对象?有人可以在这里展示一个例子吗?感谢。
答案 0 :(得分:1)
关于apply
的使用,这里有两件事:
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this,
args = arguments;
clearTimeout(timeout);
timeout = setTimeout(function() {
timeout = null;
if (!immediate) func.apply(context, args);
}, wait);
if (immediate && !timeout) func.apply(context, args);
};
};
首先,在context
回调之外捕获setTimeout
。因此,无论使用this
绑定规则来确定初始上下文(取决于稍后如何调用depounced函数),它都会被传递给回调函数。
或者,您可以执行以下操作:
setTimeout(function() {
...
func.apply(this, args);
}.bind(this), wait);
发生的第二件事是保留论点。 apply
这里用作传递参数的方法(再次,在setTimeout
回调之外重要地捕获),您将传递给原始函数。因为它需要array
(而不是call),所以可以轻松转移。
所以,如果你有类似的东西:
debouncedFunction(a, b)
内部func
被恰当地称为func(a, b)
。