JavaScript 从浅入深 100 题训练计划--(7)柯里化(Curry)

题目:实现 curry 函数,将多参数函数转换为一系列单参数函数

function add(a, b, c) { return a + b + c; }
const curriedAdd = curry(add);
curriedAdd(1)(2)(3) // 6
curriedAdd(1, 2)(3) // 6

 

柯里化:柯里化(Currying)是一种将多个参数的函数转换为一系列单参数函数的技术。简单说就是:把 f(a, b, c) 变成 f(a)(b)(c) 的形式。

核心思想:柯里化不会调用函数,而是对函数进行转换,返回一个可以逐步接收剩余参数的新函数。

 

function add(a, b, c) { return a + b + c }
function curry(a) {
  return function (b) {
    return function (c) {
      return a + b + c;
    }
  }
}
console.log(curry(1, 2)(3), 'curry')

  

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

const curriedAdd = curry(add);
console.log(curriedAdd(1)(2)(3));   // 6
console.log(curriedAdd(1, 2)(3));   // 6
console.log(curriedAdd(1, 2, 3));   // 6

  

posted @ 2026-07-20 17:03  小新的蜡笔  阅读(1)  评论(0)    收藏  举报