防抖
触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间
function unshake(fn){
let timer = null
return function (){
clearTimeout(timer);
timer = setTimeout(()=>{
fn.apply(this,arguments);
clearTimeout(timer)
},500)
}
}
节流
高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率
function throttle(fn){
let canRun = true;
return function(){
if(!canRun) return;
canRun = false;
setTimeout(()=>{
fn.apply(this,arguments);
canRun = true;
},500)
}
}