前端面试题-函数柯里化

165 阅读1分钟

定义

函数柯里化(currying)是一种将多参数的函数转化为一系列单参数函数的技术。具体来说,它可以将一个接收多个参数的函数转化为接收单一参数的函数,并且返回接收余下参数且返回结果的新函数。例如将乘法运算 multiply(a, b, c) 的调用方式转换为 multiply(a)(b)(c) 的调用方式。

const a = b = c = 2;
// 普通函数
var multiply = (a, b, c) => {  
  return a * b * c;  
}
multiply(a, b, c); // 输出 8

// 模拟 - 函数柯里化
var multiply = (a) => (b) => (c) => a * b * c;
multiply(a)(b)(c); // 输出 8

实现

// 实现 - 函数柯里化
function currying(fn, ...args) {
  if (args.length >= fn.length) {
    return fn(...args); // 参数长度与fn的参数长度一致开始计算
  } else {
    return (...args2) => {
      return currying(fn, ...args, ...args2); // 递归调用
    };
  }
}

// 使用
function add(x, y) {
  return x + y;
}

const curryAdd = currying(add);
const result = curryAdd(1, 2);
console.log(result); // 输出 3