柯里化

    //定义柯里化函数
    function curry(fn) {
    //定义一个空数组
        var arr = [];
        //闭包,返回一个匿名函数
        return function () {
        //如果参数的长度等于0时(就是不填参数,如下面的fns())
            if (arguments.length === 0) {
            //返回fn的执行结果到打印fns()中----下面return的结果带到这里
                return fn.apply(null, arr);
            }
            //如果参数的长队不等于0时,将参数以数组的形式添加到空数组中
            arr = Array.prototype.concat.apply(arr, arguments);
            // var arr1=Array.prototype.slice.call(arguments);//ES5中写法
            // var arr1=Array.from(arguments);//Es6中才有的写法
            // arr=arr.concat(arr1);与上面注释的第一条合起来与上面的arr=Array....作用相同    
       }
    }
    //定义求和的函数
    function getSum() {
        //返回 将参数带入数组中并且归并
        return Array.prototype.reduce.call(arguments, function (sum, item) {
            return sum + item;
        });
        // var arr=Array.from(arguments);
        // var sum=arr.reduce(function(sum,item){
            // return sum+item;
        // });
        // return sum; 注释部分等同于上面的return Array.....
    }
    //定义fns 是 curry中带入getsum
    var fns = curry(getSum);
    fns(1);
    fns(10);
    fns(12);
    fns(15, 16);
    fns(15, 16, 18);
    //打印 fns();的执行结果
    console.log(fns());//103
posted @ 2020-12-24 18:55  `Duet`  阅读(59)  评论(0编辑  收藏  举报