0
我想了解underscore.js防抖動功能的機制: 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;
};
};
事情我被困with是內部可返回函數中使用的上下文變量。我不明白爲什麼我們應該在這裏使用它以及它包含什麼上下文。 我試圖使用相同的功能與簡單的調用debounced函數沒有應用任何上下文,它也運作良好。 這裏是我的小提琴與這兩個功能: http://jsfiddle.net/vlrt/fby9dhe0/11/
那麼,這裏是必要的背景?需要應用什麼背景?
@torazuburo,非常感謝。在我測試這個功能的時候,我只關注全局函數的去除,並且把其他用例排除在外。現在我明白,如果我們想要刪除一個obect方法,那麼上下文對於綁定對象是必要的。否則,該函數將始終採用窗口對象上下文。 這裏是下劃線功能,附加參數關閉上下文。如果這是真的,全局變量將被採取增加,儘管對象具有相關屬性。 http://jsfiddle.net/vlrt/fby9dhe0/13/ – rumirumi 2014-09-03 11:03:22