节流函数是一种常用的优化方法,用于限制一个函数在一定时间内只能执行一次,可以有效避免高频率触发函数执行的问题。下面是一个使用原生JS实现的节流函数及一个例子:
function throttle(func, delay) {
let timer = null;
let lastRunTime = 0;
return function() {
let context = this;
let args = arguments;
let currentTime = Date.now();
clearTimeout(timer);
if (currentTime - lastRunTime >= delay) {
func.apply(context, args);
lastRunTime = currentTime;
} else {
timer = setTimeout(function() {
func.apply(context, args);
lastRunTime = Date.now();
}, delay);
}
};
}
// 例子:每隔500ms打印一次当前时间
function printTime() {
console.log(new Date().toLocaleTimeString());
}
const throttledPrintTime = throttle(printTime, 500);
setInterval(throttledPrintTime, 100);
在上述代码中,throttle
函数接受两个参数:func
是要节流的函数,delay
是限制的时间间隔。返回一个新的函数,在调用新函数时,会根据当前时间判断是否执行func
。
在例子中,我们定义了一个printTime
函数,用于打印当前时间。我们使用throttle
函数对printTime
进行节流,将节流后的函数赋值给throttledPrintTime
。
然后,我们使用setInterval
每100ms调用一次throttledPrintTime
函数。由于throttledPrintTime
被节流限制为每500ms执行一次,所以实际上每隔500ms才会打印一次当前时间。
这样,通过节流函数可以有效限制函数的执行频率,避免过多的执行次数。