JS 函数柯里化

发布于 2024-02-01 07:55:26 字数 1067 浏览 30 评论 0

柯里化就是将一个多参数的函数转换成单参数调用。比如有个函数 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

孤单情人

暂无简介

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文