你封装的节流和防抖函数 retrun后面函数不执行了,是什么问题
时间: 2024-04-10 15:33:58 浏览: 118
SQL Server 作业同步 (结合备份作业)
如果你封装的节流和防抖函数返回后面的函数没有执行,可能是因为在封装的过程中没有正确处理函数的执行逻辑。以下是一个修复的示例:
```typescript
// utils/debounce.ts
export function debounce(func: Function, delay: number) {
let timer: NodeJS.Timeout | null = null;
return function(...args: any[]) {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
func.apply(this, args);
}, delay);
};
}
// utils/throttle.ts
export function throttle(func: Function, delay: number) {
let timer: NodeJS.Timeout | null = null;
let lastRun = 0;
return function(...args: any[]) {
const currentTime = Date.now();
if (!timer) {
func.apply(this, args);
lastRun = currentTime;
return;
}
if (currentTime - lastRun >= delay) {
func.apply(this, args);
lastRun = currentTime;
}
};
}
```
在上面的示例中,修复了防抖函数和节流函数的返回逻辑。
对于防抖函数,当延迟时间内再次触发时,会先清除之前的定时器,然后重新设置定时器。这样可以确保只有最后一次触发的定时器会执行回调函数。
对于节流函数,初始状态下,如果没有定时器存在,则立即执行回调函数。如果已经存在定时器,则根据当前时间与上次运行时间的差值判断是否达到节流时间间隔,如果满足条件,则执行回调函数。
请注意,以上示例是基于Node.js环境下的实现,如果你在浏览器环境中使用,请适当调整定时器的类型和清除方式。另外,确保你正确使用这些封装的函数,并传递正确的参数和回调函数。
阅读全文