纯函数中的缓存 ---lodash中的memoize

823 阅读1分钟

记忆函数实现原理

function getList (params) {
    console.log(params);
    retrun params * 1024;
}
// 记忆函数(纯函数:相同的输入永远会得到相同的输出)
function memoize (fn) { 
    /** 把下面函数的执行结果缓存起来,通过判断cache中有没有相同的值,有相同的值,直接返回,
    * 没有相同的值,执行fn,给cache对象再赋一个新的键值,同时存储起来,
    * 把函数fn的参数作为键,(arguments是伪数组)
    */
    let cache = {};
    retrun function () {
        let key = JSON.string(arguments); 
        // 因为arguments是伪数组,所以用apply(apply第二个参数是数组)
        cache[key] = cache[key] || fn.apply(fn,arguments);
        return cache[key];
    }
}
let selectFun = memoize(getList);
console.log(selectFun(1))
console.log(selectFun(1))
console.log(selectFun(2))
console.log(selectFun(2))
console.log(selectFun(2))

打印结果为
// 1
// 1024
// 1024
// 2
// 2048
// 2048
// 2048

[也就是lodash中的memoize方法](https://www.lodashjs.com/docs/lodash.memoize)