函数节流和函数防抖都是在限制被触发函数的执行次数,以解决函数触发频率过高导致浏览器响应速度跟不上出现的卡顿、延迟现象,这也就是前端的性能优化。
1.防抖
理解:函数防抖即是事件被触发n秒(自己规定的时间)后再执行函数,如果在这n秒内被用户再次触发这个函数,则重新计时,也就是从触发函数起,再过n秒才执行函数。在触发函数后,执行函数前,你再去触发这个函数,它又从0开始计时到n才执行函数。
最常见的防抖就是百度搜索,当我们输入一些搜索关键字(不点击enter键),在n秒内不再输入内容,则浏览器会自动发起请求。但是如果在这n秒内还输入内容,则它不会发起请求。这就节省了网络请求达到性能优化。
一句话:在触发到执行函数过程中,如果还触发函数,最后执行的是最后一次触发的函数。
防抖函数(普通写法):
var debounce = function (func, delay) {
let timer = null;
return function () {
//这里是一个闭包
var that = this,
args = arguments; //arguments是这个function传入的参数
if (timer) {
clearTimeout(timer); //在执行前再次触发需要时间清零
timer = setTimeout(function () {
func.apply(that, args);
}, delay);
}
};
};
function myFunc(