防抖:事件触发n秒后再执行回调,如果n秒内被再次触发,则重新及计时,比如浏览器上的模糊搜索
function debounce(fn, delay) {
let timer = null;
return function() {
if(timer !== null) {
clearTimeout(timer) //如果计时任务已经存在,并且又触发了相同的事件,则取消当前计时,重新计时
}
timer = setTimeout(() => fn.apply(this, arguments), delay)
}
}
节流:事件连续触发,但n秒内只执行一次回调,比如:scroll,resize事件
function throttle(fn, time) {
let t0 = 0;
return function() {
let t1 = new Date();
if(t1-t0 > time) {
fn.call(this,arguments)
t0 = t1;
}
}
}