防抖:函数在一段时间内多次调用,仅最后一次调用有效,且每次调用刷新计时器。
function debounce(fun,time){
let timer = null;
return function(){
if(timer){clearTimeout(timer)}
timer = setTimeout(()=>{fun.apply(this,arguments)},time)
}
}
节流:稀释函数执行频率
两种方式实现
1.时间戳
function throttle(fun,time){
let t1 = 0;
return function(){
let t2 = +new Date();
if(t2-t1>=time){fun.apply(this,arguments)
t2 = t1}
}
}
2.计时器
function throttle(fun,time){
let timer =null;
return function(){
if(!timer){
fun.apply(this,argument)
timer = setTimeout(()=>{timer=null},time)
}
}
}
节流:事件被触发后,规定时间内不会再次触发。
防抖:规定时间内触发多次事件,仅最后一次触发有效。
场景:
节流:scroll,resize, touchmove, mousemove等极易持续性促发事件的相关动画问题,降低频率
防抖:一些表单元素的校验,如手机号,邮箱,用户名等