防抖和节流
防抖
触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间。
js
function debounce(fn, timing) {
let timer;
return function() {
clearTimeout(timer);
timer = setTimeout(() => {
fn();
}, timing);
}
}节流
高频事件触发,但在 n 秒内只会执行一次,所以节流会稀释函数的执行效率。
js
function throttle(fn, timing) {
let trigger;
return function() {
if (trigger) return;
trigger = true;
fn();
setTimeout(() => {
trigger = false;
}, timing);
}
}有个简单的记法,防抖就是连续重新回城(重新触发),节流就是放技能进入CD(触发一次后进入CD,CD结束才能再次触发)。