0

0

JavaScript函数式编程_柯里化与组合技巧

夢幻星辰

夢幻星辰

发布时间:2025-11-28 19:47:26

|

462人浏览过

|

来源于php中文网

原创

柯里化将多参函数转化为单参函数链,实现参数预配置;组合通过compose或pipe串联函数,提升代码复用与可读性;二者结合可构建清晰的数据处理流程。

javascript函数式编程_柯里化与组合技巧

在JavaScript函数式编程中,柯里化(Currying)组合(Composition) 是两个非常实用的技巧。它们能帮助我们写出更简洁、可复用、易于测试的代码。下面直接来看这两个概念的实际意义和使用方法。

什么是柯里化

柯里化是把一个接收多个参数的函数转换成一系列只接受一个参数的函数的过程。每次调用返回一个新的函数,直到所有参数都被传入。

比如有一个加法函数:

function add(a, b, c) {
  return a + b + c;
}

// 柯里化后:
const curriedAdd = a => b => c => a + b + c;

curriedAdd(1)(2)(3); // 6

立即学习Java免费学习笔记(深入)”;

这种写法的好处是你可以“预配置”部分参数:

const addOne = curriedAdd(1);
addOne(2)(3); // 6
addOne(5)(10); // 16

这在处理通用逻辑时特别有用,比如过滤数组:

const greaterThan = threshold => num => num > threshold;

const isPositive = greaterThan(0);
[−1, 0, 1, 2].filter(isPositive); // [1, 2]

如何实现通用柯里化函数

我们可以写一个函数,自动将普通函数转换为柯里化版本:

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn.apply(this, args);
    } else {
      return function (...nextArgs) {
        return curried.apply(this, args.concat(nextArgs));
      };
    }
  }
}

// 使用示例:
function multiply(a, b, c) {
  return a b c;
}

const curriedMultiply = curry(multiply);
curriedMultiply(2)(3)(4); // 24
curriedMultiply(2, 3)(4); // 24

这个 curry 函数通过判断参数个数决定是否继续返回新函数,兼容多种调用方式。

函数组合:把小函数拼成大功能

组合(compose)是指将多个函数连接起来,前一个函数的输出作为下一个函数的输入。这是函数式编程的核心思想之一。

PHP的使用技巧集
PHP的使用技巧集

PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。它可以比 CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多。下面介绍了十个PHP高级应用技巧。 1, 使用 ip2long() 和 long2ip() 函数来把 IP 地址转化成整型存储到数据库里

下载

比如我们有两个函数:

const toUpper = str => str.toUpperCase();
const exclaim = str => str + '!';

// 组合它们:
const shout = str => exclaim(toUpper(str));
shout('hello'); // 'HELLO!'

但如果函数多了,嵌套会变得难读。我们可以写一个 compose 工具函数:

const compose = (...fns) => value =>
  fns.reduceRight((acc, fn) => fn(acc), value);

// 从右往左执行
const shout = compose(exclaim, toUpper);
shout('hello'); // 'HELLO!'

还有一个方向叫 pipe,从左到右执行,更符合阅读习惯:

const pipe = (...fns) => value =>
  fns.reduce((acc, fn) => fn(acc), value);

const scream = pipe(toUpper, exclaim);
scream('hi'); // 'HI!'

组合让代码更声明式,也更容易测试每个小函数。

柯里化与组合结合使用

真正强大的地方在于把柯里化和组合一起用。比如处理数据流:

const map = fn => array => array.map(fn);
const filter = fn => array => array.filter(fn);
const prop = key => obj => obj[key];

// 示例数据
const users = [
  { name: 'Alice', age: 25 },
  { name: 'Bob', age: 30 },
  { name: 'Charlie', age: 35 }
];

// 获取所有用户的名字
const getNames = pipe(
  map(prop('name'))
);

getNames(users); // ['Alice', 'Bob', 'Charlie']

// 获取年龄大于30的用户名字
const getElderNames = pipe(
  filter(user => user.age > 30),
  map(prop('name'))
);

getElderNames(users); // ['Charlie']

这种风格清晰、可复用,而且每个函数都很小,容易单元测试。

基本上就这些。柯里化让你“记住”部分参数,组合让你像搭积木一样构建逻辑。两者配合,JavaScript函数式编程会变得更优雅。不复杂但容易忽略。

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

846

2023.08.22

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

562

2023.09.20

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

954

2023.09.19

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

77

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

47

2025.11.27

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

499

2023.08.04

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 21.1万人学习

R 教程
R 教程

共45课时 | 7.8万人学习

C 教程
C 教程

共75课时 | 5.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号