封装一个阶乘

思路:

  1. 在闭包中定义一个对象,key为传进来参数转成的字符串(数组的join办法)
  2. 判断对象中是否有传进来的值,有返回,否则计算,并将阶乘的后果存到这个对象中。
  3. 返回一个函数。

具体实现过程如下:

  // 封装一个阶乘函数        // var mult = function(){        //     var a = 1;        //     for(let i=0;i<arguments.length;i++){        //         a = a*arguments[i]        //     }        //     return a        // }        // console.log(mult(1,2,3));        // ////////////////////////////////////////        // 优化1,把阶乘过的后果存起来        // var catche = {};        // var mult = function () {        //     var a = 1;        //     let b = Array.prototype.join.call(arguments, ",");        //     if (catche[b]) {        //         return catche[b]        //     } else {        //         for (let i = 0; i < arguments.length; i++) {        //             a = a * arguments[i];        //         }        //         catche[b] = a;        //         return a        //     }        // }        // console.log(mult(1, 2, 3));        // console.log(mult(1, 2, 3));        // ////////////////////////////////////////        //优化2,将存后果的对象封装在闭包中        var mult = (function () {            var catche = {};            var calculate = function(){                var a = 1;                for (let i = 0; i < arguments.length; i++) {                    a = a * arguments[i];                }                return a;            }            return function () {                let args = Array.prototype.join.call(arguments, ",");                if (args in catche) {                    return catche[args]                }                return catche[args] = calculate.apply(null,arguments)             }        })();                console.log(mult(1, 2, 3));        console.log(mult(1, 2, 3));