# memorize
1、 当某个函数为纯函数(即相同的入参,总能得到相同的结果);
2、 函数内部牵扯大量计算,或拥有时间代价
当函数满足上述两个条件时,可以使用记忆函数来牺牲空间复杂度,对计算结果进行缓存,以提升程序执行效率;
实现要点
1、计算结果缓存到闭包变量(或全局Store或全局变量)
2、入参唯一索引(hash或其他方式)
实现例子
function memorize(f) {
const cache = {};
return function() {
const key = arguments.length + [].join.call(arguments, ',');
if(key in cache) {
return cache[key];
}
return cache[key] = f.apply(this, arguments);
}
}
// 测试
function add(x, y) {
console.log('computed!');
return x + y;
}
function memAdd = memorize(add);
add(1, 2) // computed - 3
add(1, 2) // computed - 3
add(1, 2) // computed - 3
memAdd(1, 2) // computed - 3
memAdd(1, 2) // 3
memAdd(1, 2) // 3