add(1)(2)(3)
我们当然可以自己实现一个工具函数专门来生成 柯里化 函数。
主要思路是什么呢,要判断当前传入函数的参数个数 (args.length) 是否大于等于原函数所需参数个数 (fn.length) ,如果是,则执行当前函数;如果是小于,则返回一个函数。
Ramda
Ramda 中的函数所有都支持柯里化。也就是说,所有的多参数函数,默认都可以使用单参数函数。
还是举上面的例子
大名鼎鼎的 lodash 中也提供了 柯里化 函数 ,那么它和Ramda
有什么区别呢
lodash
是一个很强大的工具函数库,比如 节流,防抖,深拷贝等等,只要引入 lodash ,我们就可以直接使用。 Ramda
是一个函数式编程风格的函数库。
柯里化有什么作用
主要有3个作用: 参数复用、提前返回和 延迟执行
我们来简单的解释一下: 参数复用:拿上面 f
这个函数举例,只要传入一个参数 z
,执行,计算结果就是 1 + 2 + z
的结果,1 和 2 这两个参数就直接可以复用了。
提前返回 和 延迟执行 也很好理解,因为每次调用函数时,它只接受一部分参数,并返回一个函数(提前返回),直到(延迟执行)传递所有参数为止。
扩展阅读