实现一个具有记忆功能的函数,当输入相同时直接返回结果而不用重新进行计算:
利用闭包实现
function memorize(fn) {
let map = new Map();
return function (...args) {
if(map.has(args.join('-'))) return map.get(args.join('-'));
let res = fn(...args);
if(!map.has(args.join('-'))) map.set(args.join('-'), res);
return res;
}
}
/**
* let callCount = 0;
* const memorizedFn = memorize(function (a, b) {
* callCount += 1;
* return a + b;
* })
* memorizedFn(2, 3) // 5
* memorizedFn(2, 3) // 5
* console.log(callCount) // 1
*/