最近在学习js的时候,遇到了函数节流与函数防抖,一开始听说了也很懵,明白了原理之后才知道是换汤不换药,加了个好听的名字,我们平时肯定也用到了,下面来进行详细说明:
函数节流:一个函数在执行一次之后,只有大于设定的执行周期之后才会执行第二次。
我们也可以这样理解,当某个函数需要频繁触发,这样必定会影响性能,所以在规定时间内,只让函数触发的第一次生效,后面的都不生效。
function throttle (fn, delay) {
var lastTime = 0; // 记录上一次触发的时间
return function () {
var nowTime = Date.now(); // 记录当前函数触发的时间
if (nowTime - lastTime > delay) {
fn.call(this); // 修正this指向问题
lastTime = nowTime; //同步时间
}
}
}
函数防抖:一个需要频繁触发的函数,在规定时间之内,只让最后一次生效,前面的不生效
function debounce (fn, delay) {
var timer = null;
return function () {
// 一开始先清除延时器,然后再重新设置延时器
clearTimeout(timer);
timer = setTimeout(function () {
fn.apply(this);
}, delay);
}
}