我想了解 underscore.js debounce 功能的机制:http: //underscorejs.org/#debounce
这是它的本机代码:
_.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/
那么,这里的上下文是否必要?需要应用什么上下文?