面试题答案
一键面试函数柯里化的定义
函数柯里化(Currying)指的是将一个接受多个参数的函数转化为一系列接受单个参数的函数。即把 f(a, b, c)
转化为 f(a)(b)(c)
的形式。它的本质是部分求值,通过逐步传入参数,延迟最终计算。
代码优化示例
- 原始柯里化函数
function add(a) {
return function(b) {
return function(c) {
return a + b + c;
};
};
}
// 使用方式
const result = add(1)(2)(3);
- 优化参数处理和复用性
- 使用
reduce
优化参数处理
- 使用
function curry(func) {
return function curried(...args) {
if (args.length >= func.length) {
return func.apply(this, args);
} else {
return function(...nextArgs) {
return curried.apply(this, args.concat(nextArgs));
};
}
};
}
function sum(a, b, c) {
return a + b + c;
}
const curriedSum = curry(sum);
const result1 = curriedSum(1)(2)(3);
const result2 = curriedSum(1, 2)(3);
const result3 = curriedSum(1)(2, 3);
- 提高复用性,创建可复用的柯里化函数生成器
function curry(func) {
return function curried(...args) {
if (args.length >= func.length) {
return func.apply(this, args);
} else {
return function(...nextArgs) {
return curried.apply(this, args.concat(nextArgs));
};
}
};
}
// 复用柯里化函数
function multiply(a, b) {
return a * b;
}
const curriedMultiply = curry(multiply);
const multiplyByTwo = curriedMultiply(2);
const product = multiplyByTwo(5);
在上述优化中,使用 curry
函数来实现柯里化,它可以处理不同的参数传入方式,提高了参数处理的灵活性。同时,通过将柯里化逻辑抽象成 curry
函数,可以方便地对不同函数进行柯里化,提高了复用性。