JS 函数柯里化
柯里化就是将一个多参数的函数转换成单参数调用。比如有个函数 f(a, b, c)
,通过柯里化后变成 f(a)(b)(c)
柯里化可以做什么
柯里化可以方便的在现有函数基础上扩展出新功能函数,比如有个日志记录函数 log(now, type, message)
,它接收三个参数,第一个参数 now 代表日志的打印时间,第二个参数 type 代表日志的级别,第三个参数代表日志内容。现在我们这样使用它:
log(new Date(), 'error', '这是日志信息')
每次我们调用 log
函数,都需要传入三个完整参数,而我们在写业务逻辑时,大部分时候日志信息都是相似的,比如同一段逻辑代码里的日志时间是一样的,这时我们就可以通过柯里化,实现一个自带当前时间记录的 logNow
函数:
import _ from 'lodash'
const curryLog = _.curry(log)
const logNow = curryLog(new Date())
// 记录日志,时间自动就是当前时间
logNow('error', '这是错误日志')
可以看到,柯里化使得我们可以生成函数的部分调用。柯里化后的函数不会丢失任何东西,只是在调用方式上更灵活了。
柯里化的实现
以下是简单的柯里化实现,更完整的实现可以参考 lodash
源码中的 curry
函数:
function curry(func) {
return function curried(...args) {
if (args.length >= func.length) {
return func.apply(this, args)
} else {
return function (...args2) {
return curried.apply(this, args.concat(args2))
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论