memoize
函数记忆化,缓存函数执行结果以提升性能。
函数签名
typescript
function memoize<T extends (...args: any[]) => any>(
fn: T
): T & { cache: Map<string, ReturnType<T>> }参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
fn | Function | 是 | 要记忆化的函数 |
返回值
| 类型 | 说明 |
|---|---|
T & { cache: Map } | 记忆化后的函数,附带 cache 属性用于访问缓存 |
工作原理
- 创建 Map 用于存储缓存
- 返回包装函数:
- 使用
JSON.stringify将参数序列化为缓存键 - 检查缓存中是否有该键:
- 有:直接返回缓存的结果
- 无:执行原函数,将结果存入缓存,然后返回
- 使用
- 在包装函数上添加
cache属性,允许外部访问和清空缓存
适用于纯函数(相同输入总是产生相同输出),可显著提升重复调用的性能。