gpt4 book ai didi

javascript - underscore.js debounce 函数中的内部函数上下文

转载 作者:行者123 更新时间:2023-12-03 11:55:33 26 4
gpt4 key购买 nike

我试图了解 underscore.js debounce 函数的机制: http://underscorejs.org/#debounce

这是它的 native 代码:

_.debounce = function(func, wait, immediate) {
var timeout, args, context, timestamp, result;

var later = function() {
var last = _.now() - timestamp;

if (last < wait && last > 0) {
timeout = setTimeout(later, wait - last);
} else {
timeout = null;
if (!immediate) {
result = func.apply(context, args);
if (!timeout) context = args = null;
}
}
};

return function() {
context = this;
args = arguments;
timestamp = _.now();
var callNow = immediate && !timeout;
if (!timeout) timeout = setTimeout(later, wait);
if (callNow) {
result = func.apply(context, args);
context = args = null;
}

return result;
};
};

我遇到的问题是内部可返回函数中使用的上下文变量。我不明白为什么我们应该在这里使用它以及它包含什么上下文。我尝试通过简单调用去抖函数来使用相同的函数,而不对其应用任何上下文,并且它也运行良好。这是我对这两个函数的小改动: http://jsfiddle.net/vlrt/fby9dhe0/11/

那么,这里的上下文是必要的吗?需要应用什么上下文?

最佳答案

Context 是调用函数的去抖版本的 this。如果我们要对对象上的方法进行去抖,那么我们将使用 object.debounced_function 来调用它,但我们希望使用与 this 相同的对象来调用原始函数。

如果去抖函数不是对象方法,或者在没有 this 的情况下调用,则上下文将为 null 或 window 或其他内容,而原始函数将为以此作为 this 调用,但没有人会关心。

我假设您了解 Function#apply 方法,该方法使用特定上下文 (this) 和一组参数调用函数。

关于javascript - underscore.js debounce 函数中的内部函数上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25625386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com