我需要实现的函数应该接受一个要记忆的函数,然后返回一个新函数,该函数记住所提供函数的输入。
这是一个练习,因为memoize函数不需要记住前面所有的值,只需要记住最后一个输入值,然后函数返回。
function memoizeTransform(f) {
// valOne & valTwo intend to record the input values
// of the function
let valOne
let valTwo
// lastResult intend to record the result value of the function
let lastResult
const memoize = (funct) => (x1, x2) => {
if (valOne === x1 && valTwo === x2) {
console.log("if statement")
return lastResult
} else {
lastResult = funct(x1, x2)
return lastResult
}
}
return memoize(f)
}
实际代码无法访问我试图记录的先前值。
您可能正在寻找这样的内容:
function memoizeTransform(f) {
let valOne;
let valTwo;
let lastResult;
return (x1, x2) => {
if (valOne === x1 && valTwo === x2) {
console.log("Cached...");
return lastResult;
} else {
lastResult = f(x1, x2);
valOne = x1;
valTwo = x2;
return lastResult;
}
};
}
function sum(a, b) {
console.log('Calculating...');
return a + b;
}
let f = memoizeTransform(sum);
console.log(f(1, 2));
console.log(f(1, 2));
console.log(f(2, 3));