快速实现纯函数化的工具--柯里化(curry)
1、什么是 Curry:
只传递函数的一部分参数来调用它,让它返回一个函数去处理剩下的参数。� 可以一次性地调用curry函数,也可以每次只传一个参数分多次调用。
本质是函数的部分调用。
Ramda 函数本身都是自动柯里化
2、Curry 帮助函数:
Lodash、Ramda库中都有Curry 帮助函数。在使用这类函数时有一个很重要的模式就是将要操作的数据放在最后的一个参数中。3、手动实现Curry:
function curry (fn, args) {
let length = fn.length
args = args || []
return function() {
let _args = args.slice(0),arg,i
for (i = 0; i < arguments.length; i++) {
arg = arguments[i]
_args.push(arg)
}
if (_args.length < length) {
return curry.call(this, fn, _args)
} else {
return fn.apply(this, _args)
}
}
}
let fn = (a,b,c) => [a,b,c]
let _curry = curry(fn)
console.log(_curry(1)(2,3)) //[1,2,3]
console.log(_curry(1)(2)(3)) //[1,2,3]