什么是记忆函数
记忆函数就是可以将函数的计算结果缓存在某个对象中,下次调用时,如果参数相同,则直接从缓存中取数据,从而避免无谓的重复运算
function sum(a, b) {
return a + b
}
function memoize(fn) {
// TODO 实现记忆函数
}
const memoizeSum = memoize(sum)
const res = memoizeSum(1, 2)
const res1 = memoizeSum(1, 2) // 参数,第二次调用时,直接从缓存中取出数据,不用重新计算一次
实现记忆函数
- 实现memoize,此时还没有记忆功能
function memoize(fn) {
return function(...args) {
return fn(...args)
}
}
- 如何判断输入参数一致呢?
使用JSON.stringify
把参数包裹,作为键值。缓存对象为Map
。
function memoize(fn) {
const _cache = new Map()
return function(...args) {
const key = JSON.stringify([...args])
if (_cache.has(key)) {
return _cache.get(key)
}
const result = fn(...args)
_cache.set(key, result)
return result
}
}
现在一个基础版的记忆函数功能就算实现了。