柯里化函数将并行参数强制拆解为严格顺序、逐个接收的调用链,每次只接受一个参数且依赖前序结果;参数必须按形参声明顺序依次传入,fn.length决定收齐条件,忽略默认值与rest参数;序列化过程单向固化,不可逆、不可插入或替换中间参数。

柯里化函数在参数序列化中的表现,核心是把原本并行传入的多个参数,强制拆解为严格顺序、逐个接收的调用链。它不改变参数本身,而是重构了参数到达的时间与结构——每次只接受一个,且后续调用必须依赖前序结果。
参数必须按声明顺序依次传入
柯里化函数要求参数严格遵循原函数形参定义的顺序。比如 function divide(a, b, c) 柯里化后只能是 divide(10)(2)(5),不能跳过中间参数或打乱顺序。一旦顺序错乱(如 divide(10)(5)(2)),计算逻辑就会出错,因为闭包捕获的是位置绑定的值,而非语义绑定的名称。
每次调用只消费一个“槽位”,不支持批量填充
标准柯里化每次调用只处理一个参数,即使你传入多个(如 curriedAdd(1, 2)),通用实现通常仍会将其视为一次调用、累积为数组,直到总数 ≥ fn.length 才执行。这意味着它天然排斥“跳跃式”或“分组式”传参——不是不能传多个,而是无法靠多参数调用提前跳过中间函数层。
参数数量由 fn.length 决定,不感知默认值或 rest 参数
fn.length 只统计非默认、非 rest 的形参个数。例如:
-
function log(prefix, msg = 'default') { ... }→fn.length === 1,柯里化后只等一个参数就执行,msg的默认值被忽略; -
function sum(...nums) { ... }→fn.length === 0,通用柯里化会永远等待,因为永远达不到“参数收齐”的条件。
这种静态判断机制让参数序列化变得确定但僵硬:它序列化的是“声明契约”,不是“运行时行为”。
序列化过程不可逆,也无法动态插入或替换中间参数
柯里化形成的是一条单向闭包链:每个中间函数都固化了前面所有参数,无法在中途修改、重置或注入新值。比如 const f = add(1)(2) 得到的是“已记住 1 和 2”的函数,之后只能接第三个数,不能再换成 add(1)(3) 或回退补参数。序列化即固化,没有回溯或分支能力。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











