首頁  >  文章  >  web前端  >  Javascript Throttle & Debounce應用介紹_基礎知識

Javascript Throttle & Debounce應用介紹_基礎知識

WBOY
WBOY原創
2016-05-16 17:40:041365瀏覽
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);
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn