在什么情况下使用上下文?
Under what circumstances does the context get used?
我正在研究post去抖动的解决方案:
Can someone explain the "debounce" function in Javascript
我正在努力想
func.apply(context, arguments);
是必要的,而不仅仅是使用
func();
我认为 99% 的可能性它只会被用作一个函数。什么情况下会附加到一个对象上?有人可以在这里举个例子吗?谢谢
debounce
旨在处理以任何方式调用的函数。如果使用上下文或参数调用被去抖动的函数,则在使用 debounce
.
调用时需要传递这些函数
因此,如果您通常会拨打这样的电话:
foo.method(arg1, arg2);
那么你应该也能写:
debounced_method = debounce(foo.method);
foo.debounced_method(arg1, arg2);
然后当它调用该方法时,它会收到 this = foo
和 arguments = arg1, arg2
。
关于 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)
。
我正在研究post去抖动的解决方案:
Can someone explain the "debounce" function in Javascript
我正在努力想
func.apply(context, arguments);
是必要的,而不仅仅是使用
func();
我认为 99% 的可能性它只会被用作一个函数。什么情况下会附加到一个对象上?有人可以在这里举个例子吗?谢谢
debounce
旨在处理以任何方式调用的函数。如果使用上下文或参数调用被去抖动的函数,则在使用 debounce
.
因此,如果您通常会拨打这样的电话:
foo.method(arg1, arg2);
那么你应该也能写:
debounced_method = debounce(foo.method);
foo.debounced_method(arg1, arg2);
然后当它调用该方法时,它会收到 this = foo
和 arguments = arg1, arg2
。
关于 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)
。