18. 手写柯里化函数 副本.md

查看飞书原文 ↗3,147 字符

1. 核心概念 (Core Concept)

柯里化(Currying)是函数式编程中的一个重要概念,指将一个接受多个参数的函数,转换成一系列只接受一个参数的函数序列,并返回一个新的函数。每次调用新的函数时,它会接收一个参数,并返回一个新的函数,直到接收到最后一个参数时,才会执行原始函数并返回结果。

2. 为什么需要它? (The "Why")

柯里化带来了多种优势:

3. API 与用法 (API & Usage)

柯里化本身不是 JavaScript 内置的 API,而是一种函数转换的技术。手动实现柯里化通常需要一个高阶函数,该函数接收一个多参数函数作为输入,并返回一个柯里化后的函数。

以下是一个经典的、简化版的手动实现柯里化的高阶函数示例:

/**
 * 手动实现柯里化函数
 * @param {Function} fn - 待柯里化的函数
 * @returns {Function} - 柯里化后的函数
 */
function curry(fn) {
  // 返回一个新的函数,这个函数是柯里化后的入口
  return function curried(...args) {
    // 如果当前收集的参数数量已经达到了原始函数所需的参数数量
    if (args.length >= fn.length) {
      // 直接调用原始函数,并应用当前收集到的参数
      return fn.apply(this, args);
    } else {
      // 如果参数数量不够,则返回一个新的函数
      // 新函数会接收剩余的参数,并与之前收集的参数合并后,再次调用 curried 函数自身
      return function(...restArgs) {
        return curried.apply(this, args.concat(restArgs));
      };
    }
  };
}

// 示例用法:一个简单的求和函数
function sum(a, b, c) {
  return a + b + c;
}

// 对 sum 函数进行柯里化
const curriedSum = curry(sum);

// 逐步调用柯里化后的函数
console.log(curriedSum(1)(2)(3)); // 输出: 6
console.log(curriedSum(1, 2)(3)); // 输出: 6
console.log(curriedSum(1)(2, 3)); // 输出: 6
console.log(curriedSum(1, 2, 3)); // 输出: 6

解释:

4. 关键注意事项 (Key Considerations)

5. 参考资料 (References)


原文链接与附件索引