参数复用是柯里化最直观、最实用的价值——将固定不变的参数提前传入生成定制函数,后续仅传变化部分,如固定“麦当劳”店名后简化点餐调用;其核心依靠闭包暂存已传参数,通过判断参数数量决定返回新函数或执行原函数;适用于API封装、表单校验、格式化工具和事件回调等场景。

参数复用是柯里化最直观、也最实用的价值——不是为了写得“高级”,而是让你少写重复代码,把固定不变的部分先存起来,后面只变需要变的那部分。
什么是参数复用?
就是把函数中某些经常相同、很少改动的参数提前传进去,生成一个“定制版”新函数,后续调用时只需传剩下的变量参数。比如:所有请求都走同一域名、所有日志都带“ERROR”前缀、所有价格计算都默认加13%税——这些“不变的”,就可以复用。
举个生活化的例子
你常点同一家外卖店的三款套餐,每次都要选“店名 + 套餐编号 + 份数”。
普通写法每次都要重复填店名:
order("麦当劳", "巨无霸套餐", 2)
order("麦当劳", "薯条套餐", 1)
order("麦当劳", "冰淇淋套餐", 3)
柯里化后,先把“麦当劳”固定住:
const mcOrder = curry(order)("麦当劳");
mcOrder("巨无霸套餐", 2);
mcOrder("薯条套餐", 1);
mcOrder("冰淇淋套餐", 3);
怎么实现参数复用?
核心靠闭包“记住”已传的参数。手写一个简单柯里化工具就能看出逻辑:
- 用 fn.length 知道原函数要几个参数
- 每次调用时把参数暂存进一个数组(比如叫 args)
- 如果参数不够,就返回新函数,等下次再传;够了,就用 apply 一次性执行
- 中间每一步返回的函数,都带着之前存好的 args ——这就是复用的载体
哪些场景最适合参数复用?
- API 封装:固定 base URL 和 token,生成专用于某类资源的请求函数
- 表单校验:固定规则(如“必须是邮箱”),只换具体输入值
- 格式化工具:固定日期格式字符串,每次只传时间戳
- 事件回调:固定操作类型("delete")和模块ID("cart-item-5"),生成可直接绑定的点击处理函数
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











