当前位置: 首页 > news >正文

JS手写代码篇---手写函数柯里化

13、手写函数柯里化

它将一个接受多个参数的函数转换为一系列只接受一个参数的函数

举个例子:

 function add(a, b) {return a + b;}console.log(add(2, 3)); // 输出:5// 柯里化后:function curriedAdd(a) {return function (b) {return a + b;};}const add2 = curriedAdd(2); // 固定第一个参数为 2console.log(add2(3)); // 输出:

柯里化

  • 传入:一个函数,但是有多个参数
  • 目的:就是把多个参数进行链式调用
        let currying = function (func) {// 参数// let args = [];//这样的话,每次调用currying,都会指向第一次的args// 返回函数进行链式调用,,也需要传递参数return function curried(...args) {// 每次链式调用都应该有自己的参数收集,可以这样递归实现:return function result(...res) {// 当res的长度为0(不调用参数的时候,就代表要执行函数)if (res.length === 0) {return func(...args)} else {// 当在执行函数之前,就要保存参数,进行链式调用args.push(...res);return result;}}}}

进行改进:

        // 柯里化函数:传入一个函数let currying = function (func) {// 开始递归返回函数// ...args可以收集函数return function curried(...args) {// 如果参数数量足够,执行原函数// 如果收集的函数参数大于等于了原函数的参数,就可以直接执行了if (args.length >= func.length) {return func.apply(this, args);}// 否则返回一个新函数继续收集参数// 当参数不足时,返回一个新函数继续收集参数// 新函数将之前收集的参数(args)与新传入的参数(newArgs)合并return function (...newArgs) {// 这里就是链式调用return curried.apply(this, args.concat(newArgs));};};};

我写的一些问题:

  1. 结构复杂:嵌套了两个函数(curried和result),逻辑不够直观
  2. 参数收集不完整:只收集了第二次及以后的参数,第一次调用的参数没有被收集
  3. 递归使用不当:result函数的递归调用方式不够优雅
  4. 链式调用逻辑有误:当传入空参数时才执行函数,这与柯里化的常见实现方式不同

相关文章:

  • 【Python 算法零基础 4.排序 ⑪ 十大排序算法总结】
  • 浏览器工作原理01 [#]Chrome架构:仅仅打开了1个页面,为什么有4个进程
  • 汽车的安全性能测试:试验台铁地板的重要性
  • Unity3D仿星露谷物语开发60之定制角色其他部位
  • 【题解-洛谷】P3370 【模板】字符串哈希
  • Docker + Nginx + Logrotate 日志管理与轮换实践
  • YUM仓库编译出现`conflicting requests`问题解决方案
  • Linux系统安装Docker
  • Python 构建法律DeepSeek RAG
  • YOLO训练保持原有识别能力
  • Spring 团队详解:AOT 缓存实践、JSpecify 空指针安全与支持策略升级
  • 宝塔think PHP8 安装使用FFmpeg 视频上传
  • 数据结构之常用排序算法(冒泡、选择等)
  • 以STM32H7微控制器为例,简要说明stm32h7xx_it.c的作用
  • 主流 AI IDE 之一的 Cursor 介绍
  • mysql+keepalived
  • C#中的CLR属性、依赖属性与附加属性
  • 《零基础读懂新能源汽车》—— 新能源汽车充电革命:从逆变器原理到800V超充实战,一篇全掌握!
  • Python训练营打卡Day46(2025.6.6)
  • 【React】React 18 并发特性
  • xml网站地图格式/搜狐财经峰会
  • wordpress+增加域名/seo视频网页入口网站推广
  • 网站里的地图定位怎么做的/舆情监测分析系统
  • 做网站 兼职/网站设计制作公司
  • 卖建材的网站有哪些/会员制营销
  • 《动态网站建设》第03章在线测试/利于seo的建站系统有哪些