33、函数防抖与节流
解决性能问题,可降低函数调用频率。事件频繁触发的时候,比如window.resize
以及window.onmousemove
等等,触发频率十分高,会造成浏览器性能问题。以及输入框搜索的时候会实时去后台请求数据,对服务器造成不必要的压力。
函数节流(间隔一定时间执行一次)
function throttle(fn,delay=500){
let pre = 0;
return function(event){
const cur = Date.now();
if(cur - pre > delay){ //只有与上次调用的时间差大于delay
fn.call(this,event)
pre = cur;
}
}
}
函数防抖(一定时间内,只触发最后一次)
function debounce(fn,delay = 500){
let timer = null;
return function(e){
if(timer){clear(timer)}
timer = setTimeout(()=>{ //这里需要用箭头函数;因为需要改变this指向
fn.call(this,e)
},delay)
timer = null;
}
}
补充:高阶函数:1、参数是函数 2、返回值是函数。满足其中之一的就是高阶函数。