函数柯里化实现

2022 年 4 月 8 日 星期五(已编辑)
/
15
这篇文章上次修改于 2024 年 7 月 20 日 星期六,可能部分内容已经不适用,如有疑问可询问作者。

函数柯里化实现

柯里化(Currying)是一种关于函数的高阶技术。它不仅被用于 JavaScript,还被用于其他编程语言。

柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c)。

柯里化不会调用函数。它只是对函数进行转换。

// 功能: 传入一个函数 将该函数自动柯里化

/**
 *
 * @param {Function} fn
 */
function currying(fn) {
  //返回柯里化后的函数
  //此函数可接受部分参数
  return function curryed(...args) {
    //如果此时函数接收的参数大于目标参数长度 则直接调用该函数\
    if (fn.length <= args.length) {
      console.log([...args]);
      return fn.apply(this, [...args]);
    } else {
      //如果此时函数接收的参数小于目标的参数长度 则返回一个函数 该函数可再次接收剩余参数
      return function (...argsed) {
        return curryed.apply(this, [...args, ...argsed]);
      };
    }
  };
}
function add(num1, num2, num3, num4, num5) {
  return Array.prototype.reduce.call(arguments,((p,c) => p=p+c),0);
}
var curryAdd = currying(add);
console.log(curryAdd(1, 2, 3, 4, 5));
console.log(curryAdd(1, 2)(3, 4, 5));
console.log(curryAdd(1)(2)(3)(4)(5));

输出结果:

df1d0c0b25c7a0d5b25a3124d0c62c84

df1d0c0b25c7a0d5b25a3124d0c62c84

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...