Skip to content
On this page

函数柯里化的实现 ​

实现思路 ​

  1. 创建一个柯里化函数,它接受一个函数作为参数,并返回一个新函数。

  2. 在新函数内部,使用闭包保存传入的函数和已经传入的参数。

  3. 在新函数的主体中,判断已经传入的参数数量是否满足原函数的参数数量。

  4. 如果已经传入的参数数量足够,就调用原函数并传入这些参数,返回结果。

  5. 如果已经传入的参数数量不足,就返回一个新的柯里化函数,并将已经传入的参数和新传入的参数合并。

  6. 重复步骤3到步骤5,直到所有参数都被处理完毕。

js
// 函数柯里化通常由闭包和递归实现

function curry(fn) {
  // 返回柯里化后的函数
  return function curried(...args) {
    // 持续接受参数,若参数数量大于等于原函数,则直接传入原函数并调用
    if (args.length >= fn.length) {
      return fn.apply(this, args);
    } else {
      // 否则返回一个新的函数,直到函数的所有参数都被收集完毕
      return function (...newArgs) {
        // 收集参数
        return curried.apply(this, args.concat(newArgs));
      };
    }
  };
}