关于javascript:闭包封装变量之封装一个阶乘

6次阅读

共计 966 个字符,预计需要花费 3 分钟才能阅读完成。

封装一个阶乘

思路:

  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));
正文完
 0