我正在研究该帖子,以寻求反跳的解决方案:
我正在努力思考一种情况
func.apply(context, arguments);
是必要的,而不仅仅是使用
func();
我认为有99%的机会只能将其用作功能。在什么情况下会将其附加到对象上?有人可以在这里举一个例子吗?谢谢。
关于的使用,这里发生两件事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
使用什么绑定规则来确定初始上下文(取决于以后如何调用去去抖动的函数),都会将其传递给回调函数。
或者,您可以执行以下操作:
setTimeout(function() {
...
func.apply(this, args);
}.bind(this), wait);
第二件事是保留论据。apply
此处用作传递setTimeout
要传递给原始函数的参数(再次,重要的是在回调之外捕获)的方法。因为它需要一个array
(而不是call),所以可以轻松转移。
因此,如果您有类似以下内容:
debouncedFunction(a, b)
内部func
适当地称为func(a, b)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句