答案
function memo(func, resolver=(...args) => args.join('_')) {
// your code here
let cache=new Map();
return function(...args){
let cacheKey=resolver(...args);
if(cache.has(cacheKey)){
return cache.get(cacheKey);
}
let value=func.apply(this,args);
cache.set(cacheKey,value);
return value;
}
}
Implement a general memoization function -
memo()
Memoization 是应用广泛的性能优化的手段,如果你开发过React应用,你一定不会对React.memo感到陌生。
那么,请实现你自己的memo() 函数。传入相同的参数的时候,直接返回上一次的结果而不经过计算。
参数有可能不是字符串,所以你的memo()需要能接受第三个决定缓存key的参数,有点类似于_.memoize() 。
注意
这是一种空间换时间的优化,在实际面试中,请仔细分析时间空间复杂度。
事实上Memoization是设计模式中的一个小分类,代理模式-缓存代理。 如果你对代理模式感兴趣的话可以看一下本人写的相关博客。 js设计模式