MST

星途 面试题库

面试题:JavaScript函数式编程中如何优化函数柯里化的代码

请解释什么是函数柯里化,并且在JavaScript函数式编程场景下,举例说明如何对一个简单的柯里化函数进行代码优化,比如优化参数处理和复用性等方面。
38.0万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

函数柯里化的定义

函数柯里化(Currying)指的是将一个接受多个参数的函数转化为一系列接受单个参数的函数。即把 f(a, b, c) 转化为 f(a)(b)(c) 的形式。它的本质是部分求值,通过逐步传入参数,延迟最终计算。

代码优化示例

  1. 原始柯里化函数
function add(a) {
    return function(b) {
        return function(c) {
            return a + b + c;
        };
    };
}
// 使用方式
const result = add(1)(2)(3); 
  1. 优化参数处理和复用性
    • 使用 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 函数,可以方便地对不同函数进行柯里化,提高了复用性。