1. 记忆函数
思路
利用map或者对象结合闭包特性进行键值对缓存
解题方法
- 定义一个cache对象,用于保存需要缓存的对象
- 将参数进行字符串化用以做key
- 根据key来判断cache中是否存在当前key对应的对象,如果存在,就说明已经存在缓存对象,直接取出来返回,如果不存在就将其保存至cache对象中去
实现
/**
* @param {Function} fn
*/
function memoize(fn) {
let cache = new Map();
return function(...args) {
const key = JSON.stringify(args);
if (!cache.has(key)) {
cache.set(key, fn(...args));
}
let result = cache.get(key);
return result;
}
}
/**
* let callCount = 0;
* const memoizedFn = memoize(function (a, b) {
* callCount += 1;
* return a + b;
* })
* memoizedFn(2, 3) // 5
* memoizedFn(2, 3) // 5
* console.log(callCount) // 1
*/