记忆函数是用空间换时间的优化技术,通过缓存纯函数的输入输出结果避免重复计算;核心是用Map存储序列化参数为键的执行结果,要求函数无副作用且输入可安全序列化。

JavaScript 中的记忆函数(Memoization)是一种优化技术,通过缓存函数的执行结果,避免对相同输入重复计算,从而提升性能。它特别适合纯函数(输入相同、输出确定、无副作用)场景,比如递归计算、复杂数据处理或频繁调用的高开销函数。
记忆函数的核心原理
记忆函数本质是“用空间换时间”:内部维护一个缓存(通常是对象或 Map),每次调用前先查缓存;命中则直接返回结果,未命中则执行原函数、存入缓存后再返回。
关键点:
- 输入必须可安全作为缓存键(推荐用 JSON.stringify 序列化简单参数,但注意函数、undefined、Symbol、循环引用等无法被正确序列化)
- 缓存需支持多参数、不同数据类型(Map 比普通对象更健壮,支持任意键类型)
- 纯函数前提:不能依赖外部变量或修改外部状态,否则缓存结果可能失效
手写一个基础记忆函数
以下是一个兼容多数场景的简易实现(支持多参数,使用 Map 缓存):
立即学习“Java免费学习笔记(深入)”;
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;
};
}登录后复制
使用示例(优化斐波那契递归):
标签: javascript java js json app
还木有评论哦,快来抢沙发吧~