memoize
2024年06月17日
一、认识
问题: 写一个函数,接受一个函数作为参数,另外接受一个 resolver
,返回一个函数,要求返回的这个函数需要实现以下的目标: 调用这个函数的时候,如果传入相同的参数,那么第二次相同参数会返回缓存的结果,从而减少不必要的计算过程;
场景: 比如说我们有一个函数,但这个函数执行起来特别的耗时,我们需要多次去调 用,那我们每次去调 用这个函数的时候,都需要等一段时间才能获取到这个结果,所以这对性能来说是有影响的。我们可以在第一次执行的时候把这个结果缓存起来,当我们第二次再调用这个函数的时候我们不需要再等这么长的时间 ,而直接从缓存中来获取数据,从而提高性能。
二、语法
三、实现
function memorize(func, resolver) {
const map = new Map();
return function (...args) {
const key = resolver ? resolver.apply(this, args) : args[0];
if (map.has(key)) {
return map.get(key);
}
const result = func.apply(this, args);
map.set(key, result);
return result;
};
}
function print(obj) {
return { ...obj };
}
const memorizeFn = memorize(print);
const obj = {
a: 1,
b: 2,
};
console.log(memorizeFn(obj));
obj.a = 1 + "修改";
console.log(memorizeFn(obj));