1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function memo(fn) {
return function () {
const arg = Array.protoytype.slice.call(arguments);
// 判断传入的函数有没有cache缓存
fn.cache = fn.cache || {};
// 判断传入的函数纯cache缓存有没有对应的参数
// 有,直接返回值
// 没有进行计算,并往函数的cache缓存存入计算的结果,下次直接返回值
return fn.cache[arg] ? fn.cache[arg] : (fn.cache[arg] = fn.call(this, arg));
};
}

// 功能函数
var sqrt = function (num) {
return Math.sqrt(num);
};

var memoSqart = memo(sqart);

memoSqart(4); // 计算并存值
memoSqart(4); // 直接返回缓存的值