题目链接:
思路:
构建一个 map 存储调用结果,args 本身是一个数组,数组是复杂数据类型,每次调用,如果作为 map 的 key 去存储,会导致存储的key不一样,所以我们需要给他转换成 字符串类型,调用 数组的 toString 变成 字符串存储下来即可
代码:
javascript
/**
* @param {Function} fn
* @return {Function}
*/
function memoize(fn) {
let cache = new Map()
return function (...args) {
console.log(args)
if (!cache.has(args.toString())) cache.set(args.toString(), fn.apply(this, args))
return cache.get(args.toString())
}
}
/**
* let callCount = 0;
* const memoizedFn = memoize(function (a, b) {
* callCount += 1;
* return a + b;
* })
* memoizedFn(2, 3) // 5
* memoizedFn(2, 3) // 5
* console.log(callCount) // 1
*/