MST

星途 面试题库

面试题:JavaScript 函数式编程中的柯里化与组合

阐述柯里化和组合在 JavaScript 函数式编程中的作用。请实现一个柯里化函数 `curryAdd`,它可以接受多个数字并返回它们的和,并且利用柯里化和组合的方式实现 `add5AndMultiplyBy3` 函数,该函数先给输入值加 5 然后乘以 3。
11.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

柯里化和组合在 JavaScript 函数式编程中的作用

  1. 柯里化(Currying)
    • 作用:柯里化是一种将多参数函数转换为一系列单参数函数的技术。它可以延迟函数的执行,直到所有参数都被提供。这使得代码更加灵活,便于复用部分应用的函数。例如,对于一个 add(a, b) 函数,柯里化后可以先提供 a,得到一个新函数,再提供 b 才执行加法操作。这样可以创建一些特定功能的函数,比如 add5 = add(5)add5 就是一个只接受一个参数并和 5 相加的函数。柯里化有助于提高函数的可复用性和代码的简洁性,同时也符合函数式编程中单一职责原则,每个函数只负责一件事情。
  2. 组合(Composition)
    • 作用:组合是将多个函数组合成一个新函数的过程。它通过将前一个函数的输出作为后一个函数的输入,将多个简单函数组合成一个更复杂的功能。组合使得代码更加模块化,易于维护和理解。例如,有 f(x)g(x) 两个函数,组合后 compose(f, g)(x) 就相当于 f(g(x)),将 gx 的处理结果作为 f 的输入,实现更强大的功能。组合也符合函数式编程中避免副作用和保持数据不可变的原则。

代码实现

// 柯里化函数curryAdd
function curryAdd() {
    const args = Array.from(arguments);
    const innerAdd = function() {
        args.push(...arguments);
        return innerAdd;
    };
    innerAdd.toString = function() {
        return args.reduce((acc, val) => acc + val, 0);
    };
    return innerAdd;
}

// 利用柯里化和组合实现add5AndMultiplyBy3函数
function add5AndMultiplyBy3(num) {
    const add5 = curryAdd(5);
    const multiplyBy3 = function(x) {
        return x * 3;
    };
    return multiplyBy3(add5(num));
}