MST

星途 面试题库

面试题:JavaScript 函数式编程优化及函数组合

给定三个函数 `function add(a, b) { return a + b; }`,`function multiply(a, b) { return a * b; }`,`function square(a) { return a * a; }`。现在有一个需求,需要将这三个函数组合成一个新函数,这个新函数接收两个数 `x` 和 `y`,先对 `x` 进行平方,然后与 `y` 相加,最后将结果与 `x` 相乘。请用函数式编程的方式实现这个组合函数,并阐述在实际项目中这种函数组合优化方式的优势与适用场景。
37.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 实现组合函数
function add(a, b) { return a + b; }
function multiply(a, b) { return a * b; }
function square(a) { return a * a; }

const composedFunction = (x, y) => {
    const squaredX = square(x);
    const sumResult = add(squaredX, y);
    return multiply(sumResult, x);
};
  1. 优势
    • 代码可读性:通过将复杂的操作分解为多个简单的函数,再进行组合,使代码逻辑更加清晰,易于理解和维护。例如,在上述代码中,squareaddmultiply 每个函数都有明确单一的职责,阅读 composedFunction 时能快速明白其操作步骤。
    • 可复用性:每个基础函数(如 squareaddmultiply)都可以在其他地方复用。如果项目中其他地方也需要计算平方、加法或乘法,直接调用这些函数即可,无需重复编写代码。
    • 可测试性:由于每个函数职责单一,对单个函数进行单元测试会更加容易。比如可以单独测试 square 函数是否正确计算平方,add 函数是否正确执行加法运算等。在发现问题时,也更容易定位到具体是哪个函数出现错误。
  2. 适用场景
    • 数据处理流水线:在数据处理过程中,常常需要对数据进行一系列不同的操作,如数据清洗、转换、聚合等。通过函数组合,可以方便地构建数据处理流水线。例如,在处理用户输入数据时,可能先对数据进行格式化(类似 square 这样的转换函数),然后进行一些计算(如 add),最后根据计算结果进行分类或存储(类似 multiply 这样结合前面结果的操作)。
    • 复杂业务逻辑构建:当业务逻辑较为复杂时,将其拆分为多个简单函数并组合,可以有效降低代码的复杂度。比如在电商系统中计算商品总价,可能涉及到商品单价、数量、折扣、运费等多种因素的计算,每个因素的计算可以用一个单独的函数,最后组合起来得到总价。