柯里化是将多参函数转化为单参函数链,函数组合则是将多个函数串联执行。例如 curry(add) 支持 add(1)(2)(3),而 compose(toUpper, exclaim) 可生成新函数处理字符串。通过 slice(10) 柯里化后与 lower、trim 组合,实现 processInput(‘ HELLO WORLD ‘) 输出 ‘hello worl’,提升代码可读性与复用性。

柯里化和函数组合是函数式编程中的两个核心技巧,它们让 JavaScript 函数更灵活、可复用且易于测试。理解并掌握这两个概念,能显著提升代码的表达力和维护性。
什么是柯里化(Currying)
柯里化是将一个接受多个参数的函数转换为一系列只接受一个参数的函数的过程。每次调用返回一个新的函数,直到所有参数都被收集完毕,最终执行原函数。
例如,一个加三个数的函数:
function add(a, b, c) { return a + b + c;}
可以柯里化为:
立即学习“Java免费学习笔记(深入)”;
function curryAdd(a) { return function(b) { return function(c) { return a + b + c; }; };}curryAdd(1)(2)(3); // 6
这种写法允许你逐步传参,提前配置部分参数,形成新的专用函数,比如:
const add10 = curryAdd(10)(0);add10(5); // 15
手动实现通用柯里化函数
你可以写一个通用的 curry 函数,自动将普通函数转换为柯里化版本:
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); // 24curriedMultiply(2, 3)(4); // 24
这个实现依赖于函数的 length 属性(即形参个数),当收集的参数足够时才执行原函数。
PHP的使用技巧集
PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。它可以比 CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多。下面介绍了十个PHP高级应用技巧。1, 使用 ip2long() 和 long2ip() 函数来把 IP 地址转化成整型存储到数据库里
440 查看详情
函数组合(Function Composition)
函数组合是指将多个函数连接起来,前一个函数的输出作为下一个函数的输入。它符合“数据流”的思维方式,使逻辑更清晰。
最基本的组合方式是从右到左执行:
function compose(f, g) { return function (x) { return f(g(x)); };}
例如,把字符串转大写再添加后缀:
const toUpper = str => str.toUpperCase();const exclaim = str => str + '!';const loudExclaim = compose(exclaim, toUpper);loudExclaim('hello'); // 'HELLO!'
你可以扩展为支持多个函数:
function compose(...fns) { return function (value) { return fns.reverse().reduce((acc, fn) => fn(acc), value); };}
结合柯里化与组合提升代码质量
当你把柯里化和组合结合使用,就能写出高度声明式、可读性强的代码。
比如处理用户输入:去掉空格、转小写、截取前10字符:
const trim = str => str.trim();const lower = str => str.toLowerCase();const slice = n => str => str.slice(0, n);const processInput = compose(slice(10), lower, trim);processInput(' HELLO WORLD '); // 'hello worl'
这里 slice 是柯里化的,可以预先配置长度,然后和其他一元函数无缝组合。
基本上就这些。柯里化让你构造函数更灵活,组合让你串联逻辑更清晰。两者配合,让 JavaScript 更接近函数式的理想状态。不复杂但容易忽略细节,比如参数顺序和执行方向。掌握它们,你会写出更干净的函数链。
以上就是函数式JavaScript_柯里化与组合技巧的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/864392.html
微信扫一扫
支付宝扫一扫