js:偏函数Partial和柯里化Currying
  TEZNKK3IfmPf 2023年11月15日 26 0
- 定义 区别
偏函数 (Partial application) 在计算机科学中,局部应用是指固定一个函数的一些参数,然后产生另一个更小元的函数。(什么是元?元是指函数参数的个数,比如一个带有两个参数的函数被称为二元函数。) 局部应用则是固定一个函数的一个或者多个参数,也就是将一个 n 元函数转换成一个 n - x 元函数。
柯里化 (Currying) 在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术。 柯里化是将一个多参数函数转换成多个单参数函数,也就是将一个 n 元函数转换成 n 个一元函数。

原函数

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

偏函数

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

柯里化

function add(a) {
  return function (b) {
    return function (c) {
      return a + b + c;
    };
  };}console.log(add(1)(2)(3)); // 6
// 偏函数function partial(func, ...presetArgs) {
  return function (...args) {
    return func.call(this, ...presetArgs, ...args);
  };}const partialAdd = partial(add, 1);console.log(partialAdd(2, 3)); // 6
// 柯里化function curry(func, ...presetArgs) {
  return function (...args) {
    const allArgs = [...presetArgs, ...args];

    if (allArgs.length >= func.length) {
      // 如果参数大于等于函数参数,那么允许函数提供全部参数被正常调用
      return func.apply(this, allArgs);
    } else {
      // 提供参数小于函数参数,返回偏函数
      return curry.call(null, func, ...allArgs);
    }
  };}const curryAdd = curry(add);console.log(curryAdd(1)(2)(3));

参考
理解JS里的偏函数与柯里化

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
TEZNKK3IfmPf