Curry化函数

<script>
        function fn(){
            var i,
                rult = 0,
                len = arguments.length;
                for (i=0;i<len ;i++ )
                {
                    rult += arguments[i];
                }
            return rult;
        }
        function addfn(fn){//Curry化函数,方法扩展性更强
            var slice = [].slice,//存储方法
                old_args = slice.call(arguments,1);//存储除fn外多余的参数
            return function(){
                var new_args = slice.call(arguments);//存储新传入的参数
                args = old_args.concat(new_args);//    拼接新数组和旧数组
                return fn.apply(null,args);    //借用函数fn进行计算
            }
        }
        /*
            或者这样写
            console.log( addfn(fn,4,5,6,7)(5,1,2,3) )
        */
        var newadd = addfn(fn,4,5,6,7);
        console.log( newadd(5,1,2,3) );

    </script>

何时使用Curry化

当发现使用同一个函数,并且传入的参数都相同,可以使用先存入旧的参数在传入新的参数,旧参数和新参数拼接为一个数组,然后用方法进行运算

原文地址:https://www.cnblogs.com/jokes/p/9524065.html