偏函数是固定原函数部分参数后返回新函数的技术,可用bind或手动封装实现,支持占位符的版本更灵活,与柯里化不同在于不强制单参调用,侧重复用固定配置。

偏函数是指固定住原函数的部分参数,返回一个新函数,新函数接收剩余参数并执行原函数。它不是 JavaScript 原生支持的特性,但可通过闭包轻松实现。
基础偏函数实现(固定前几个参数)
最常见的方式是用 bind 或手动封装::
-
用
bind实现:直接利用Function.prototype.bind,第一个参数为this上下文,后续为预设参数。
例如:const add5 = (x) => x + 5;可写成const add5 = add.bind(null, 5);(需原函数支持多参) -
手动实现通用
partial函数:接收原函数和若干预设参数,返回新函数,调用时合并参数后执行。
示例:const partial = (fn, ...preset) => (...rest) => fn(...preset, ...rest);
支持占位符的偏函数(类似 Lodash 的 partial)
更灵活的偏函数允许用占位符(如 _)表示“稍后传入”的位置,实现参数插空绑定:
- 需维护一个唯一占位符标识(避免与真实值冲突),比如
const PLACEHOLDER = {}; - 调用时遍历预设参数,遇到占位符就从实际调用参数中取下一个;剩余未用参数追加到末尾
- 关键逻辑在于参数拼接顺序:预设参数中非占位符部分 + 实际参数中对应占位符位置的值 + 剩余未用参数
与柯里化(Currying)的区别
偏函数不强制一次只传一个参数,也不要求逐步收敛到单参函数;它只是“预填一部分”,其余照常传入。而柯里化会把多参函数拆成一系列单参函数链。两者目标不同:
偏函数关注「复用固定配置」(如 partial(fetch, baseUrl)),柯里化更利于函数组合与高阶抽象(如 map(fn)(list))。
实际使用建议
- 简单场景优先用
bind或箭头函数封装,轻量且语义清晰(如const logError = console.error.bind(console, '[ERROR]');) - 需要占位符或动态预设时,再引入自定义
partial工具函数 - 注意
this绑定:若原函数依赖this,用bind更安全;手动实现时需显式传递或用箭头函数规避
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











