柯里化是将多参函数转换为依次接收单参数的函数链,如 add(1)(2)(3);偏函数是通过固定部分参数生成新函数,如 multiply.bind(null, 2)。前者适用于参数复用、函数组合与事件处理,强调延迟执行;后者用于简化接口、定制回调与错误包装,侧重预设配置。两者均提升代码复用性与可读性,但柯里化注重逐步求值,偏函数聚焦参数绑定,应根据场景选择使用。

函数柯里化(Currying)和偏函数(Partial Application)是 JavaScript 中函数式编程的重要技巧。它们虽然相似,但目的和使用场景有所不同。理解它们的差异和适用情境,有助于写出更灵活、可复用的代码。
什么是柯里化?
柯里化是将一个接收多个参数的函数转换为一系列只接受一个参数的函数。每次调用返回一个新的函数,直到所有参数都被传入并执行最终逻辑。
例如:
const add = a => b => c => a + b + c;
add(1)(2)(3); // 6
这种结构让函数可以逐步接收参数,适合延迟计算或动态配置。
什么是偏函数?
偏函数是指固定一个函数的部分参数,生成一个新函数,该函数接受剩余参数。它不强制逐个传参,而是预先绑定部分值。
立即学习“Java免费学习笔记(深入)”;
借助 bind 实现:
const multiply = (a, b) => a * b;
const double = multiply.bind(null, 2);
double(5); // 10
这种方式常用于创建具有默认配置的函数变体。
柯里化的典型应用场景
- 参数复用:当某些参数在多个调用中保持不变时,柯里化能避免重复传参。比如日志函数按级别预设。
- 函数组合:在函数式编程中,柯里化便于 compose 或 pipe 操作,使数据流清晰。
- 事件处理:绑定事件时,可通过柯里化传递上下文信息而不立即执行。
- 配置驱动逻辑:如构建 API 请求函数,先传 baseURL,再传路径,最后发请求。
偏函数的实用场景
- 简化调用接口:已有函数参数较多,但某些参数固定,可用偏函数封装常用组合。
- 回调函数定制:数组方法如 map、filter 中,使用偏函数预设比较条件。
- 错误处理包装:将 error 类型提前绑定,生成特定错误抛出函数。
- 与第三方库集成:适配函数签名,使 API 更符合当前项目习惯。
基本上就这些。柯里化更强调“链式单参数调用”,适合构建高度抽象的函数流水线;偏函数则重在“参数预设”,提升调用便利性。两者都能增强代码的表达力和可维护性,根据实际需求选择即可。不复杂但容易忽略细节。










