记忆函数实现原理
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)