这一题我在看Vue的工具函数中见识到过,本质闭包和高阶函数的应用,但是理解起来还是要下点功夫~
/**
* 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
*/
要求
- 对于相同的入参多次调用,返回的结果永远不变,它返回的是已经缓存的结果
题解
function memoize(fn) {
let cache = {};
return function (...args) {
if (cache[args]) return cache[args];
return (cache[args] = fn(...args));
};
}
这里get一个知识点,对象的Key值会自动转字符类型,所以不用特地去转换key的类型和字符拼接