最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
柯里化(Currying)函数 如何通过闭包实现参数复用?
时间:2026-06-20 10:38:54 编辑:袖梨 来源:一聚教程网
柯里化函数通过闭包保存已传入参数实现复用,每次调用返回新函数并累积参数,参数数量达fn.length时执行fn.apply(this, args),支持多参数传入与this绑定。
柯里化函数通过闭包保存已传入的参数,让后续调用能“记住”之前传的值,从而实现参数复用。
闭包捕获前置参数
每次调用柯里化函数时,它不立即执行原函数,而是返回一个新函数。这个新函数内部形成闭包,把之前传入的参数存起来,等待后续参数补全。
- 例如
add(1)(2)(3)中,add(1)返回的函数记住了1;(2)再记下2;最后(3)拿到全部参数并计算 - 闭包变量(如数组或累加参数)在多次嵌套调用中持续存在,不会被释放
递归返回函数直到参数足够
柯里化函数通常判断当前收集的参数数量是否达到原函数要求的形参个数。没满就继续返回函数;满了就执行原逻辑。
- 用
fn.length获取目标函数期望参数个数 - 每次调用都把新参数追加到已存参数列表中
- 参数够了就用
fn.apply(this, args)执行,否则返回自身(带已有参数的闭包)
支持多方式调用和参数合并
实际柯里化常允许一次传多个参数(如 add(1, 2)(3) 或 add(1)(2, 3)),靠闭包维护统一参数队列。
- 内部用数组累积所有传入参数,不依赖调用次数
- 每次返回的函数仍持有该数组引用,后续调用继续往里推
- 最终执行前展开整个数组,保证顺序和完整性
绑定上下文避免 this 丢失
如果原函数依赖 this,柯里化过程需确保闭包内正确保留调用时的上下文。
- 常用
bind或箭头函数维持this指向 - 更稳妥的做法是在最外层保存
thisArg,每次执行都显式传入 - 比如
curry(fn).call(obj, 1)(2)要让fn内部的this是obj
相关文章
- 鹅鸭杀手游古代沙漠地图任务地点一图解 06-27
- 我的扬州app如何查社保 06-27
- 宝可梦pokopia环境湿润的宝可梦都有哪些 06-27
- Kicks 将接替 wayne 参加 Team Liquid 的首场 Kickoff 比赛 06-27
- 怎么在 2XKO 中免费解锁凯特琳 06-27
- 《马拉松》成为多个地区预订量最高的PS5游戏之一 06-27