柯里化
一、柯里化概念的理解
1. 柯里化也是属于函数式编程里面一个非常重要的概念
是一种关于函数的高阶技术
它不仅被用于 JavaScript,还被用于其他编程语言
2. 维基百科的解释:
在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化;
是把接收多个参数的函数,变成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数,而且返回结果的新函数的技术
柯里化声称 “如果你固定某些参数,你将得到接受余下参数的一个函数”
3. 总结:
只传递给函数一部分参数来调用它,让它返回一个函数去处理剩余的参数
这个过程就称之为柯里化
4. 柯里化是一种函数的转换,将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c)
柯里化不会调用函数。它只是对函数进行转换
function add1(x, y, z) {
return x + y + z
}
console.log(add1(10, 20, 30))
function add2(x) {
return function(y) {
return function(z) {
return x + y + z
}
}
}
console.log(add2(10)(20)(30))
const add3 = x => y => z => x + y + z
console.log(add3(10)(20)(30))
二、柯里化的优势
1. 函数的职责单一
与以往的处理不同, 以往将所有参数交由一个函数处理, 柯里化是一个函数处理一个参数, 实现了函数处理的问题变得单一
2. 复用函数的参数逻辑
function makeAdder(num) {
return function(count) {
return num + count
}
}
const add5 = makeAdder(5)
add5(10)
add5(100)
const add10 = makeAdder(10)
add5(10)
add5(100)
makeAdder函数要求我们传入一个num, 在之后使用返回的函数时,我们不需要再继续传入num了
三、实现自动柯里化函数
将普通函数转成柯里化函数
function currying(fn) {
function curried(...args) {
return fn.apply(this, args)
} else {
return function(...args2) {
return curried.apply(this, arg.concat(args2))
}
}
return curried
}