函数缓存
1. 是什么?怎么实现?
函数缓存,就是将函数运算过的结果进行缓存。
本质上就是用空间(缓存存储)换时间(计算过程)。常用于缓存数据计算结果和缓存对象。
实现函数缓存主要依靠闭包、柯里化、高阶函数。
// 简单实现:memoize
function memoize(fn) {
const cache = new Map();
return function (...args) {
const key = JSON.stringify(args);
if (cache.has(key)) return cache.get(key);
const result = fn.apply(this, args);
cache.set(key, result);
return result;
};
}
const add = (a, b) => a + b;
const cachedAdd = memoize(add);
cachedAdd(1, 2); // 3(计算)
cachedAdd(1, 2); // 3(命中缓存)
2. 使用场景
- 计算昂贵、纯函数:如斐波那契、阶乘、加解密、复杂格式化等。
- 接口幂等请求:把相同参数的 HTTP 请求结果缓存到内存,避免重复请求。
- React/Vue 渲染优化:
useMemo/computed等底层就是函数缓存思想。
补充:使用缓存时的注意事项:
- 缓存键的设计:引用类型要用稳定序列化(
JSON.stringify、structuredClone)或自定义 hash,避免不同对象键冲突。 - 内存占用:缓存无界会内存泄漏,需要 LRU 淘汰、定时清理或
Map配合容量限制。 - 闭包陷阱:缓存对象常驻内存,意味着闭包依赖的变量也会被一并保留,需关注内存释放。
- 参数数量:变长参数要正确处理(如
...args后取JSON.stringify)。
来源整理自:vue3js.cn 面试官系列



