2020-03-03
描述
返回一个内存(缓存)函数。
提示
- 通过实例化一个新的
Map
对象来创建一个空的缓存 - 返回带有一个参数的函数以提供缓存方法,该方法先检查
fn
函数根据指定的输入所返回的输出是否被缓存,如果没有的话就先进行存储,然后再返回 - 必须使用关键字
function
,以便在必要时允许返回的缓存函数修改this
上下文 - 将
cache
设置为返回函数的属性,以便方便的获取所有缓存
代码
const memoize = fn => {
const cache = new Map();
const cached = function(val) {
return cache.has(val) ? cache.get(val) : cache.set(val, fn.call(this, val)) && cache.get(val);
};
cached.cache = cache;
return cached;
};
示例
对字谜进行缓存:
const anagrams = str => {
console.log('执行 anagrams')
return str.toLowerCase()
.replace(/[^a-z0-9]/gi, '')
.split('')
.sort()
.join('');
}
const anagramsCached = memoize(anagrams);
anagramsCached('javascript'); // 打印 "执行 anagrams"
anagramsCached('javascript'); // 返回缓存过的值 "aacijprstv"
console.log(anagramsCached.cache); // anagrams 的缓存 map