函数柯里化
# 函数柯里化
# 什么是柯里化
柯里化是一种把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
是不是有点难理解,有点绕, 我们用代码例子说明下,比如:
function add (a, b, c) {
console.log(a + b + c);
}
add(1, 2, 3); // 6
1
2
3
4
2
3
4
这个add(1, 2, 3)函数接收三个参数, 把add转成柯里化函数呢,就是把它转成可以 add(1)(2)(3),或者add(1, 2)(3)这样来调用
简单来说,柯里化是一种把一个 n个参数函数,转成可以把参数分开调用的多个函数,每调用一次会返回一个新的函数,直到你调用的参数达到n个
# 为什么要柯里化
上面说到柯里化就是把一个 n个参数函数,转成可以把参数分开调用的多个函数,那我明明可以一次调用完就可以了,你还转这么多次调用,这么麻烦,有什么好处。
- 减少代码的冗余
- 增加代码可读性
# 柯里化函数的实现
我们来分析下:
add(1)(2)(3) 这种写法, 我们拆开来看 先执行 add(1), 是不是应该返回一个函数,因为后面还有 (2), 执行完 (2), 是不是还得返回一个函数,因为后面还有个 (3), 那这个 add(1)(2)(3) 是不是调用了三次函数,前面执行(1)(2)都是返回一个函数,最后一次(3)才是返回结果
以此类推,如果有n个参数,那么是不是调用前面n - 1 次,都是返回函数, 最后一次才是返回最终结果。
我们还可以知道, 调用一个函数,返回结果是一个函数,多次调用,还是返回一个函数, 这样子的写法,是不是有点递归的样子。
你猜对了,柯里化函数的实现,其实它也就是用到了递归的写法。
编辑 (opens new window)