缓存函数

应用场景 :递归 、大量数据计算、

  1. var times2 = 0;
  2. function factorial2(n) {
  3. times2++;
  4. if (n === 0 || n === 1) {
  5. return 1;
  6. }
  7. return n * factorial2(n - 1);
  8. }
  9. var times = 0,
  10. cache = [];
  11. function factorial(n) {
  12. times++;
  13. if (cache[n]) {
  14. return cache[n];
  15. }
  16. if (n === 0 || n === 1) {
  17. cache[0] = 1;
  18. cache[1] = 1;
  19. return 1;
  20. }
  21. return cache[n] = n * factorial(n - 1);
  22. }
  23. console.time('未使用缓存函数');
  24. console.log(factorial2(6));
  25. console.timeEnd('未使用缓存函数');
  26. console.time('使用缓存函数');
  27. console.log(factorial(6));
  28. console.timeEnd('使用缓存函数');
  29. console.log('cache',cache);

image.png

封装缓存函数

        var times1 = 0;
        function factorial1(n) {
            times1++;
            if (n === 0 || n === 1) {
                return 1;
            }
            return n * factorial1(n - 1);
        }
             //封装缓存函数
                function memorize(fn) {
            var cache = {};
            return function () {

                var k = [].join.call(arguments, ',');
                return cache[k] = cache[k] || fn.apply(this, arguments);
            }
        }
                console.time('未使用缓存函数');
        console.log(factorial1(5));
        console.timeEnd('未使用缓存函数');
        console.time('使用缓存函数1');
        console.log(memorize(factorial2)(5));
        console.timeEnd('使用缓存函数1');

image.png