常用函数-缓存函数 memoizition

244 阅读2分钟

说是常用,其实只是猪场的课程的标题叫做常用函数,在下工作中,似乎没有遇到过需要用到下面函数的场景,可能是我太菜了,没有看出来哪里可以使用。

缓存函数 memoizition 应用与需要大量重复计算或者依赖之前计算结果的函数

      function memoize(fun) {
        let calcs = {};
        return function (key) {
          if (!calcs[key]) {
            calcs[key] = fun.apply(this, arguments);
          }
          return calcs[key];
        };
      }

用斐波那契函数测试一下

      let count = 0; 
      function fibonacci(num) {
        count++   //这个只是为了方便后续计算出计算次数
        return num < 2 ? num : fibonacci(num - 1) + fibonacci(num - 2);
      }

如果不用缓存函数,计算0-10的斐波那契数列需要计算的次数

      for (let i = 0; i <= 10; i++) {
        fibonacci(i)
      }
      console.log(count) ///453

使用缓存函数

      fibonacci = memoize(fibonacci);
      for (let i = 0; i <= 10; i++) {
        fibonacci(i);
      }
      console.log(count); //12

可以看出使用缓存函数之后,需要的计算从453减少到12次,乍一看还是很牛皮的样子,希望以后项目中有机会用到吧。