探索函数式编程:纯函数 | 高阶函数 | 函数柯里化 | 组合函数
+ 返回一个函数: 通过高阶函数,实现一个简单的缓存功能
function memoize(coreFn, resolver) { // -- coreFn:核心函数 resolver?:自定义缓存规则函数(返回值返回对应的 key 值)
const cache = new Map() // -- 缓存表
return function (...args) {
// -- 每次调用函数,都重新创建一个对应的缓存 key,后续永 key 进行判断是否已经缓存过了
const cacheKey = typeof resolver === "function" ? resolver(...args) : args[0] // -- 判断用户是否传入自定义缓存 key,如果没有则按默认只取第一个参数作为缓存 key
let cacheResolve = cache.get(cacheKey) // -- 根据 cacheKey 获取对应的缓存数据 → 如果没有 ↓
if (!cacheResolve) { // -- 当没有相应的缓存信息时,执行 coreFn 原方法,并将其缓存起来
cacheResolve = coreFn(...args)
cache.set(cacheKey, cacheResolve)
}
return cacheResolve
}
}
+ TEST
function sum(a, b) {
console.log("真实执行")
return a + b
}
const memoizedSum = memoize(sum, (...args) => {
return JSON.stringify(args) // -- 定义缓存规则: 按照所有的参数进行缓存 → 默认只会按照第一个参数进行缓存(不常用)
})
console.log(memoizedSum(1, 3))
console.log(memoizedSum(2, 3))
console.log(memoizedSum(1, 6))
console.log(memoizedSum(1, 3))