2632. 柯里化
2025年6月25日大约 1 分钟
2632. 柯里化
/**
* 请你编写一个函数,它接收一个其他的函数,并返回该函数的 柯里化 后的形式。
* 柯里化 函数的定义是接受与原函数相同数量或更少数量的参数,并返回另一个 柯里化 后的函数或与原函数相同的值。
* 实际上,当你调用原函数,如 sum(1,2,3) 时,它将调用 柯里化 函数的某个形式,如 csum(1)(2)(3), csum(1)(2,3), csum(1,2)(3),或 csum(1,2,3) 。所有调用 柯里化 函数的方法都应该返回与原始函数相同的值。
*/
function curry(fn: Function): Function {
return function curried(...args: any[]): any {
if (args.length >= fn.length) {
return fn(...args);
}
return function (...nextArgs: any[]) {
return curried(...args.concat(nextArgs));
};
};
}
柯里化(Currying)是一种关于函数的高阶技术。它不仅被用于 JavaScript,还被用于其他编程语言。
柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c)。
柯里化不会调用函数。它只是对函数进行转换。
在参数未收集完成的时候会持续返回函数,直至参数完全收集。才会返回结果;
优势 | 概述 |
---|---|
参数复用 | 固定部分参数生成新函数,避免重复逻辑 |
延迟执行 | 可以在需要时再调用函数 |
可读性提升 | 每次调用的语义更清晰,更接近自然语言 |
支持函数组合 | 柯里化是实现函数组合的基础之一 |