柯里化将多参函数转化为单参函数链,提升函数灵活性;函数组合通过compose从右到左串联函数,管道操作符模拟从左到右数据流,增强代码可读性与模块化。

函数组合、柯里化和管道操作符是 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
</font>
</p>
<p>也可以写一个通用的柯里化函数:</p>
<font face="Courier New">
<pre class="brush:php;toolbar:false;">
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));
};
}
};
}
这样就能对任意函数进行柯里化:
const curriedAdd = curry(function(a, b, c) {
return a + b + c;
});
curriedAdd(1, 2, 3); // 6
curriedAdd(1)(2, 3); // 6
curriedAdd(1)(2)(3); // 6
</font>
</p>
<H3>函数组合:将多个函数串联成新函数</H3>
<p>函数组合(Function Composition)是指将多个函数连接起来,前一个函数的输出作为下一个函数的输入。常见的组合方式是从右到左执行(数学中的 f ∘ g)。</p>
<p>实现一个组合函数 <strong>compose</strong>:</p>
<font face="Courier New">
<pre class="brush:php;toolbar:false;">
function compose(...fns) {
return function(value) {
return fns.reduceRight((acc, fn) => fn(acc), value);
};
}
例如,我们有两个简单函数:
const toUpper = str => str.toUpperCase();
const exclaim = str => str + '!';
const sayHello = name => `hello ${name}`;
const greet = compose(exclaim, toUpper, sayHello);
greet('john'); // "HELLO JOHN!"
</font>
</p>
<p>执行顺序是:<strong>sayHello → toUpper → exclaim</strong>。</p>
<H3>管道操作符:从左到右的数据流处理</H3>
<p>管道(Pipeline)与组合相反,它是从左到右执行函数链。虽然 JavaScript 原生的管道操作符(|>)还处于提案阶段,但我们可以用函数模拟其行为。</p>
<p>实现一个 <strong>pipe</strong> 函数:</p>
<font face="Courier New">
<pre class="brush:php;toolbar:false;">
function pipe(...fns) {
return function(value) {
return fns.reduce((acc, fn) => fn(acc), value);
};
}
同样的例子,使用 pipe 写出来更符合阅读习惯:
const greet = pipe(
sayHello,
toUpper,
excl<a style="color:#f60; text-decoration:underline;" title="ai" href="https://www.php.cn/zt/17539.html" target="_blank">ai</a>m
);
greet('john'); // "HELLO JOHN!"
数据流动方向清晰:原始值 → 经过每个函数依次处理 → 最终结果。
如果未来原生支持管道操作符,代码可能长这样:
'john' |> sayHello |> toUpper |> exclaim |> console.log; // 输出: HELLO JOHN!
这种写法避免了深层嵌套,提升了可读性。
基本上就这些。柯里化提升函数灵活性,组合和管道让逻辑流程更清晰。结合使用,能让 JavaScript 代码更简洁、更具表达力。不复杂但容易忽略。
以上就是JavaScript函数组合_柯里化与管道操作符的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号