防抖 Debounce
debounce触发后wait时间段后执行一次,wait时间段内debounce被触发重新计时wait毫秒
使用场景:input值改变实时调用后端接口
function debounce(fn, wait) {
let timeout = null;
return function() {
if(timeout) clearTimeout(timeout);
timeout = setTimeout(() => {
fn.call(this, arguments);
}, wait);
};
}
节流 Throttle
使用场景:view改变时需要触发的回调函数,如:resize、onScroll等
- 时间戳:throttle被触发立即执行
function throttle(fn, wait) {
let previous = 0;
return function() {
let now = Date.now();
if(now - previous > wait) {
fn.call(this, arguments);
previous = now;
}
};
}
- 定时器:固定时间段内执行一次,停止触发后再执行一次
function throttle(fn, wait) {
let timer = null;
return function() {
if(timer) return;
timer = setTimeout(() => {
fn.call(this, arguments);
timer = null;
}, wait);
};
}