柯里化是什么以及为什么使用柯里化?

97 阅读1分钟

柯里化举例(将多参数转化为单参数)

// 定义一个加法函数
function add(x) {
  return function(y) {
    return x + y;
  };
}

// 使用柯里化的 add 函数
const addFive = add(5); // 创建一个新函数,其内部的 x 参数固定为 5
console.log(addFive(3)); // 输出 8

柯里化场景

// 定义一个柯里化的乘法函数
function curryMultiply() {
  console.log(arguments)
  const args = Array.prototype.slice.call(arguments)
  return function next(multiplier) {
    if (multiplier === undefined) {
      return args.reduce((acc, curr) => acc * curr, 1)
    }
    args.push(multiplier)
    return next
  }
}

// 使用柯里化的 multiply 函数
const multiply = curryMultiply(2)(3)(4) // 2 * 3 * 4
console.log(multiply()) // 输出 24

function curryMultiply1(...args) {
  const argsarray = args
  return function next (mul) {
    if(mul === undefined){
      return argsarray.reduce((old,curr) => old * curr,1)
    }
    argsarray.push(mul)
    return next
  }
}

// 使用柯里化的 multiply 函数
const multiply1 = curryMultiply1(2)(3)(4) // 2 * 3 * 4
console.log(multiply1()) // 输出 24