函数防抖是指在事件被触发n秒后再执行回调,如果在这n秒内事件又被触发 ,则重新计时。这可以使用在一些点击请求的事件,避免因用户的多次点击向后端发送多次请求。
function debounce(fn,wait){
let timer=null;
return function(){
let context=this;
args=[...arguments];
//如果存在定时器的话,则取消之前的定时器重新计时
if(timer){
timer=null;
}
//设置定时器,使事件间隔指定时间后执行
timer=setTimeout(()=>{
fn.apply(context,args);
},wait)
}
}
节流是规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。节流可以在scroll函数的事件监听上,通过事件节流来降低事件调用的频率。
//时间戳版
function throttle(fn,delay){
let preTime=Date.now();
return function(){
let context=this;
args=[...arguments];
nowTime=Date.now();
}
//如果两次时间间隔超过了指定时间,则执行函数
if(nowTime-preTime>=delay){
preTime=Date.now;
return fn.apply(context,args);
}
}
//定时器版
function throttle(fun,wait){
let timeout=null;
return funtion(){
let context=this;
let args=[...arguments];
if(!timeout){
timeout=setTimeout(()=>{
fun.apply(context,args);
tiemout=null;
},wait)
}
}
}