跳到主要内容

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));