JS——柯里化函数

版权声明:进击的葱 https://blog.csdn.net/qlwangcong518/article/details/86317298

描述:

JS——柯里化函数

实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <script>
        /*
        *   柯里化函数,传入参数仅作为存储
        *   执行函数时,执行内容
        *
        *
        * */
       /* function curry() {
//           var arg=Array.from(arguments);
           var slice=Array.prototype.slice;
           var arg=slice.apply(arguments);
           var self=this;
           return function () {
               var arr=slice.apply(arguments);
               console.log(arr);
//               return  self.apply(null,arg.concat(arr))
           }
        }

       var fn=curry(10)();
       console.log(fn)*/
       
       Function.prototype.curry=function () {
           var arg=Array.from(arguments);
           var self=this;
           return function () {
               if(arguments.length===0){
                   return self.apply(null,arg);
               }
               arg=arg.concat(Array.from(arguments));
           }
       };
       
       function fns() {
           console.log(arguments);
       }
     var fn1=fns.curry();
     fn1(20);
     fn1(30);
     fn1(40);
     fn1();


      /* function curry(fn) {
            var arg=[];
           var slice=Array.prototype.slice;
           return function () {
               if(arguments.length===0){
                    fn.apply(null,arg);
               }else{
                   var arr=slice.apply(arguments);
                   arg=arg.concat(arr);
               }
           }
       }
        function getSum() {
            var slice=Array.prototype.slice;
            var arr=slice.apply(arguments);
            var sum=arr.reduce(function (sum,item) {
                return sum+item;
            });
            console.log(sum);
        }*/

        function curry(_fn) {
            var arg=[];
            var fn=_fn;
            return function () {
                if(arguments.length===0){
                    fn.apply(null,arg);
                }else{
                    var arr=Array.from(arguments);
                    arg=arg.concat(arr);
                    console.log("这次传入的参数是:"+arr.join(),"现在这个数组中一共存了:"+arg.join());
                }
            }
        }
        function getSum() {
            var arr=Array.from(arguments);
            var sum=arr.reduce(function (sum,item) {
                return sum+item;
            });
            console.log(sum);
        }
       var fn=curry(getSum);
        fn(10);
        fn(20);
        fn(30);
        fn();

    </script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/qlwangcong518/article/details/86317298