概念
柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
比如函数 _f(a,b,c,d) 经过柯里化后可以使用以下方式调用:
f( a )( b )( c )( d )
f( a, b )( c )( d )
f( a, b )( c, d )
f( a, b, c )( d )
…
实现
function curry (f) {
const g = (...args) => {
if (args.length === f.length) {
return f(...args)
}
return (...right) => {
return g(...args, ...right)
}
}
return g
}
// 测试代码
function _f(a,b,c,d) {
return a+b+c+d
}
var f = curry(_f)
f(1)(2)(3,4)
f( a, b )( c )( d )
f( a, b )( c, d )
f( a, b, c )( d )