给一个函数fn 返回该函数的记忆化版本 记忆化版本就是一个函数,不会被相同的输入调用两次,而是会返回一个缓存的值 fn可以是任何函数,对他所接受的值类型没有任何限制,如果两个输入值在js中使用===运算符比较相等时,则认为相同
时间: 2024-09-29 10:11:05 浏览: 38
深入解析JavaScript中函数的Currying柯里化
给定一个函数 `fn`,我们可以创建一个记忆化版本(也称为缓存函数)来优化性能。这个新函数通常叫做 `memoizedFn`,它的工作原理是先检查输入是否已经在缓存中存在,如果存在则直接返回对应的已计算结果,否则调用原始函数并把结果存入缓存。这样做可以避免对重复输入的多次计算。
下面是一个简单的JavaScript实现示例:
```javascript
function memoizedFn(fn) {
const cache = new Map();
return function(...args) {
let key = JSON.stringify(args); // 将输入转换为字符串作为键
if (cache.has(key)) {
console.log('From cache:', key);
return cache.get(key);
} else {
console.log('Computing:', key);
const result = fn.apply(this, args);
cache.set(key, result);
return result;
}
};
}
```
在这个例子中,`memoizedFn` 接收一个函数 `fn` 作为参数,并返回一个新的函数。当调用新的函数时,我们首先将所有参数序列化成字符串,然后检查这个字符串是否在缓存中。如果是,我们就从缓存中获取结果;如果不是,我们计算结果并将其添加到缓存中。
阅读全文