函数柯里化主要是实现如下意义:
add(1)(2)(3) = 1+2+3
;
方法如下:
// 柯里化的实现 | |
function curry(){ | |
var fn = arguments[0]; | |
var arr = Array.prototype.slice.call(arguments,1); | |
return function _format(){ | |
// 本处的 arguments 和上一层函数的 arguments 不一样 | |
var args = Array.prototype.slice.call(arguments); | |
args = args.concat(arr); | |
if(args.length<fn.length){ | |
// 若当前所拥有的参数个数未达到绑定 fn 所需要的个数,那么就迭代执行 curry,使得传递参数入 args | |
return curry.apply(null,[fn].concat(args)) | |
} | |
return fn.apply(null,args) | |
} | |
} | |
var add = function(x,y,z){ | |
return x+y+z; | |
} | |
// 测试 | |
var a = curry(add, 1) | |
console.log(a(2)(3)) //6 |