js:偏函数Partial和柯里化Currying-阿里云开发者社区

开发者社区> 开发者小助手-bz> 正文

js:偏函数Partial和柯里化Currying

简介: js:偏函数Partial和柯里化Currying
+关注继续查看

-

定义

区别

偏函数 (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里的偏函数与柯里化

彻底搞懂闭包,柯里化,手写代码,金九银十不再丢分!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
python应用领域分析
python应用领域分析
6 0
学习vue3之路day1
学习vue3之路day1
18 0
学习vue3之路day2
学习vue3之路day2
5 0
最好用的 7 款 Vue 3 富文本编辑器
富文本编辑器作为直接与用户交互的内容输入生产工具,对大家的项目来说非常重要。选不好,配置不好,直接影响产品质感和用户体验,所以说在选择编辑器方面花点时间是值得的。 我试用了市面上所有主流富文本编辑器,筛掉长期不更新,bug 明显,社区活跃度低,功能单一的编辑器,把最好、最有特点的 7 款编辑器挑出来,分享给大家。这些编辑器各有各的特点,有些功能多样,但整体很重,有些功能虽然少,但某一项功能优化的特别好。希望我的测评可以帮助你选到合适你需求的编辑器。
5 0
作用域及作用域链 | 学习笔记
快速学习作用域及作用域链。
8 0
OY
VerCel 免费托管前端项目
VerCel 免费托管前端项目
5 0
Nginx-基本概念和使用
Nginx-基本概念和使用
10 0
高校学生在家实践ECS弹性云服务器
简单谈谈我这几周使用ECS弹性云服务器的体验感
3 0
学习vue3之路day3
学习vue3之路day3
5 0
1569
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载