您当前的位置: 首页 >  ar

彭世瑜

暂无认证

  • 1浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

js:偏函数Partial和柯里化Currying

彭世瑜 发布时间:2021-09-22 11:25:12 ,浏览量:1

-定义区别偏函数 (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里的偏函数与柯里化 彻底搞懂闭包,柯里化,手写代码,金九银十不再丢分!

关注
打赏
1665367115
查看更多评论
立即登录/注册

微信扫码登录

0.2701s