2676.节流
链接:2676.节流
难度:Medium
标签:
简介:现给定一个函数 fn 和一个以毫秒为单位的时间 t ,请你返回该函数的 节流 版本。
题解 1 - typescript
- 编辑时间:2023-05-16
- 执行用时:76ms
- 内存消耗:42.4MB
- 编程语言:typescript
- 解法介绍:闭包存储状态,利用setTimeout恢复状态。
type F = (...args: any[]) => void;
function throttle(fn: F, t: number): F {
// 如果有需要调用但未调用的情况,储存参数
let callArgs: any[] | null = null;
// 记录当前状态是否已经掉用过
let called = false;
return function call(...args) {
if (called) callArgs = args;
else {
fn(...args);
called = true;
setTimeout(() => {
// 恢复调用状态
called = false;
if (callArgs) call(...callArgs), (callArgs = null);
}, t);
}
};
}