// 在题目14. 实现memo()中,你实现了一个memo函数但并不考虑空间成本。
// 现实项目中,cache如果无限量使用的话可能会导致内存不足,所以最好加上一些限制。
// 比如memoize-one 做的就是,仅缓存上一次的结果。
// 请自行实现memoizeOne(),其接受两个参数:
// 求结果的函数
// (可选) 判断当前和上次的调用参数是否equal的函数
// 默认的equal 判断函数的话,用===直接对于数组元素进行比较即可。
function memoizeOne(fn,isEqual) {
let lastArgs = null;
let lastResult = null;
const defaultEqual = (prev,next) => {
if(prev.length !== next.length) return false;
for(let i = 0;i < prev.length;i++) {
if(prev[i] !== next[i]) {
return false;
}
};
return true;
};
const equalFn = isEqual ? isEqual : defaultEqual;
const memoized = (...args) => {
if(lastArgs !== null && equalFn(lastArgs,args)) {
return lastResult;
};
const result = fn(...args);
lastArgs = [...args];
lastResult = result;
return result;
};
return memoized;
}
console