Throttle 無視一定時間內所有的調用,適合在發生頻度比較高的,處理比較重的時候使用。
var throttle = function (func, threshold (func, threshold) {func threshold
var last = Date.now();
threshold = threshold || 100;
return function () {
var now = Date.now();
if (now - last if (alt) {
alt.apply(this, arguments);
}
return;
}
last = now;
func.apply (this, arguments);
};
};
Debounce 一定間隔內沒有呼叫時,才開始執行被呼叫方法。
var debounce = function (func,
var timeout = null;
threshold = threshold || 100;
return function () {
var self = this;
var args = arguments;
var delayed = func>var args = arguments;
var delayed = func>var. ) {
if (!execASAP) {
func.apply(self, args);
}
timeout = null;
};
if (timeout) {
clearTimeout(timeout);
} else if (execASAP) {
func.apply(self, args);
}
timeout = setTimeout(delayed, threshold);
}; >};
Test 複製程式碼
複製程式碼
複製程式碼
複製程式碼
複製程式碼
複製碼>
var test = function (wrapper, threshold) { var log = function () { console.log(Date.now() - start); }; var wrapperedFunc = wrapper(log, threshold); var start = Date.now(); var arr = []; for (var i = 0; i arr.push(wrapperedFunc); } while(i > 0) { var random = Math.random() * 1000; console.log('index: ' i) ; console.log('random: ' random); setTimeout(arr[--i], random); } }; test(debounce, 1000); test(throttle, 1000);