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