JavaScript-函数柯里化

94 阅读1分钟

函数柯里化的定义柯里化(Currying)是一种处理多元函数的方法。它产生一系列连锁函数,其中每个函数固定部分参数,并返回一个新函数,用于传回其它剩余参数的功能

//这里我们先通过一个简单的代码,来演示一下,让函数可以多次传参

function add(a) {
  return function (b) {
    return a + b;
  };
}
add(1)(2);

这里我们直接看一道面试题,并通过这个题目写一个通用的柯里化函数

题目实现add方法
add(1)(2)(3) = 6;
add(1, 2, 3)(4) = 10;
add(1)(2)(3)(4)(5) = 15;



function add() {
  let args = [...arguments]; //用于存放所有的参数,并获取第一次执行的参数
  //获取后续执行函数的参数
  function _add() {
    args.push(...arguments);  
    return _add;
  }
  //执行end方法,代表参数已经全部获取
  _add.end = () => {
    return args.reduce((a, b) => a + b);
  };
  return _add;  
}
let res = add(1, 2)(1)(3).end();

通过通用的柯里化函数实现

//柯里化函数
function curry() {
  let fun = arguments[0]; //拿到要运行的函数
  let args = Array.prototype.slice.call(arguments, 1); //获取传递的参数
  function _curry() {
    args.push(...arguments);
    return _curry;
  }
  _curry.end = function () {
    return add.apply(null, args);
  };
  return _curry;
}

function add() {
  return Array.prototype.reduce.call(arguments, (a, b) => a + b);
}
let res = curry(add, 1, 2)(3, 4, 5).end();