函數防抖(debounce)和函數節流(throttle)都是爲了緩解函數頻繁調用,它們類似,但有區別bash
如上圖,一條豎線表明一次函數調用,函數防抖是間隔超過必定時間後纔會執行,函數節流是必定時間段內只執行一次。app
function debounce(fn, delay) {
let timer = null;
return function () {
if (timer) clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this, arguments);
}, delay);
}
}
複製代碼
function throttle(fn, cycle) {
let start = Date.now();
let now;
let timer;
return function () {
now = Date.now();
clearTimeout(timer);
if (now - start >= cycle) {
fn.apply(this, arguments);
start = now;
} else {
timer = setTimeout(() => {
fn.apply(this, arguments);
}, cycle);
}
}
}
複製代碼
lodash
對這兩個方法的實現更靈活一些,有第三個參數,能夠去參觀學習。函數
歡迎關注個人微博@狂刀二學習