my blog
    • 前端-刘发狮-18727782912
    • 算法笔记,JavaScript实现
    • 开发中遇到的cookie问题
    • 发布-订阅设计模式
    • 柯里化和组合函数
    • 从 HTTP 1.0 到 HTTP 3.0
    • 使用node将你的学习笔记一键转化为markdown
    • 谈一谈前端开发中的惰性思想
    • web项目的灰度发布/金丝雀发布
    • 关于我的组件库 rain-ui
    • 搭建react脚手架,以及脚手架工具
    • unit-test
    • webpack优化指南

    柯里化和组合函数

    柯里化#

    柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c)。柯里化不会调用函数。它只是对函数进行转换。
    柯里化的作用是函数执行产生一个闭包,把一些信息预先存储起来供下级上下文使用。柯里化就是闭包一个很典型的应用。
    代码实现
    箭头函数确实简洁但是可读性也确实会低一点,建议适当的使用!
    换个写法
    curriedSum是函数 curry 返回一个函数,形参为 a,此时curriedSum(1)返回的是另一个函数,形参为 b,curriedSum(1)(2)返回的是sum(1,2)执行的结果,这样就实现了柯里化之后的函数从 sum(a,b)想 curriedSum(a)(b)的转化。在这个过程中,return 的函数形成了闭包,将参数存储起来了。
    我们看看 lodash 中的柯里化是怎么用的
    那我们可以试试是实现这个效果

    组合函数#

    先看个例子
    上面是把 c(2)的结果作为参数传给 b 再将 b(c(2))的结果作为参数传给 c,但是这样写多少有点不够优雅
    以上这个实现参考的是 redux 中 compose 的实现
    {% gallery %}redux 中 compose 的实现{% endgallery %}

    总结#

    柯里化思想,利用闭包,把一些信息预先存储起来,目的是供下级上下文使用。
    组合函数,把处理的函数数据像管道一样连接起来,然后让数据穿过管道连接起来,得到最终的结果。
    修改于 2025-05-17 06:29:28
    上一页
    发布-订阅设计模式
    下一页
    从 HTTP 1.0 到 HTTP 3.0
    Built with