函数防抖的意思:就是防止抖动,用函数来控制。
例举个场景:你的页面有个echart图表,假设这时候用户调整浏览器窗口大小,图表大小需要跟随着改变,这时候因为onresize浏览器窗口大小变化了,就会不停的触发图表渲染,导致看起来抖动一样。那么你想登用户在调整完窗口大小后才去执行重新渲染echart图表就可以使用函数防抖。
函数防抖
preShake = (func, time) => {
let has; //声明一个变量,在后面用来存储延时函数
return function() { //返回一个函数=》闭包
const context = this;
const args = arguments; //获取原本函数的所有参数,arguments就是
if (has) clearTimeout(has); //clearTimeout清除对应的延时方法
has = setTimeout(() => { //存储延时方法
func.apply(context, args); //自动执行函数,绑定this上下文
}, time); //time 延时多长执行函数
};
};
//使用
window.onresize = preShake(function(){
console.log('?')
},2000)
上面代码执行结果,在你连续调整浏览器窗口大小的情况下2s后只会在控制台输出一个“ ? ”问号符,而不会一直输出。
防抖原理:一定时间内的连续执行的动作不触发函数执行,等动作完成后才去执行函数方法。
包含知识点:
- 闭包
- setTimeout
- this指向
- arguments
return function () { }
闭包,返回一个函数。因为闭包能记住函数的上次变量为多少。has代表了上一次的延时方法,如果有就清除,并且重新设置。
setTimeout
延时执行方法
clearTimeout
清除当前对应的延时,如果延时还没结束就直接清除这个延时。假设你是2s那么还没2s时候你清除,那么这个2s延时就会被清除。只有下次开始时候才会重新计时。
apply
绑定对应的this上下文内容,并执行函数
arguments
代表函数传进来的所有参数(如果是箭头函数没有这个)
网友评论