函数柯里化详解

一、函数柯里化
是一种高阶函数技术,它将一个多参数函数转换为一系列单参数函数的链式调用。
核心概念
定义:将一个函数 f(a, b, c) 转换为 f(a)(b)© 的形式
**本质:**通过闭包保存参数,实现分步传参
关键特征:每次调用只接收一个参数,返回新函数或最终结果

二、实现方法
1、基础柯里化(固定参数)

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn.apply(this, args);
    } else {
      return function(...nextArgs) {
        return curried.apply(this, args.concat(nextArgs));
      }
    }
  };
}

// 使用示例
const sum = (a, b, c) => a + b + c;
const curriedSum = curry(sum);

console.log(curriedSum(1)(2)(3)); // 6
console.log(curriedSum(1, 2)(3));  // 6

2、无限参数柯里化

function infiniteCurry(fn) {
  return function curried(...args) {
    return (...nextArgs) => 
      nextArgs.length 
        ? curried(...args, ...nextArgs) 
        : fn(...args);
  };
}

// 使用示例
const add = infiniteCurry((...nums) => nums.reduce((a, b) => a + b, 0));

console.log(add(1)(2)(3)(4)()); // 10
console.log(add(1, 2)(3)());    // 6

三、核心作用
参数复用:固定常用参数,生成专用函数。
延迟执行:分阶段收集参数,在需要时触发计算。
函数组合:创建可管道化的函数单元。
动态功能生成:基于配置创建定制函数。

四、典型使用场景
数据验证:创建可复用的验证规则链
API请求封装:预配置基础URL/headers
数据处理管道: 组合map/filter/reduce操作
配置化UI组件 :生成带预设样式的组件工厂
数学计算:创建特定计算器(如税率计算器)

实践建议
优先用于参数明确固定的场景
避免过度柯里化导致调用链过长(>5级)
配合TypeScript使用增强类型安全
在性能敏感场景测试开销(多次闭包创建)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值