思路:

    1. 使用一个记忆函数包裹要执行的函数;
    2. 用一个对象以键值对的形式保存参数和值;
    3. 如果参数是曾经执行过的,就直接从cache中取值;
    4. 如果参数未执行过的,那就直接运行函数,并把值保存到cache中。
      1. const memorize = (fn) => {
      2. const cache = {};
      3. const f = (n) => {
      4. if (n in cache) return cache[n];
      5. cache[n] = fn(n);
      6. return cache[n];
      7. };
      8. return f;
      9. }
      优化
      1. const memorize2 = (fn) => {
      2. const cache = {};
      3. return (n) => {
      4. if (!(n in cache)) cache[n] = fn(n);
      5. return cache[n];
      6. };
      7. }

    上面提供的方法主要是针对单参数的,如果是多参数可以将参数进行md5或者其他的处理来作为key保存
    如果你对此非常感兴趣还可以去了解loadsh的记忆函数是怎么实现的。