# 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