1.什么是柯里化
将多参数函数转换为单参数函数,并返回一个新函数,新函数接收一个参数,并返回一个新函数,直到将参数传递完毕。这个 过程 为柯里化。
也就是foo(1, 2, 3) => foo(1)(2)(3)
2.柯里化函数作用
主要目的是为了实现参数复用和创建可复用的函数
参数复用 !!!最主要功能
不同上下文使用相同参数,不必重复调用
// 如下,不用每次add(5, 6)
function add(x) {
return function (y) {
return x + y;
};
}
function add2(x, y) {
return x + y;
}
const add5Fn = add(5);
console.log(add5Fn(6)); // 11
console.log(add2(5, 6)); // 11
创建可复用函数
每次调用可以保存执行函数的过程
function foo(x) {
// 该函数负责将 x + 2
x = x + 2;
return function (y) {
// 该函数负责将 y * 2
y = y * 2;
return function (z) {
// 该函数负责将 z * z
z = z * z;
return function () {
// 该函数负责将上几个函数结果相加
return x + y + z;
};
};
};
}
console.log(foo(1)(2)(3)()); //16
延迟执行
等到所有参数都准备完毕在执行函数
3.柯里化函数实现
function currying(fn) {
function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
return function (...args2) {
return curried.apply(this, [...args, ...args2]);
};
}
}
return curried;
}
使用方式如下
function sum(num1, num2, num3) {
return num1 + num2 + num3;
}
const currySum = currying(sum);
console.log(currySum(1)(2)(3)); //6
console.log(currySum(1, 2)(3)); //6
console.log(currySum(1, 2, 3)); //6
4.柯里化函数和函数组合的区别
函数柯里化是将多参数的函数转化为一系列接受单一参数的函数,目的是为了实现参数复用和创建可复用的函数。
函数组合是将多个函数组合成一个新的函数,目的是为了实现函数的 模块化 和 可组合性 。
它们分别关注于函数的参数处理和函数的组合关系。