MST
星途 面试题库

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

在JavaScript函数式编程中,组合(compose)和柯里化(currying)是重要概念。请编写一个函数compose,它接受多个函数作为参数,返回一个新函数,这个新函数能够依次执行传入的函数;同时编写一个curry函数,将一个普通函数转换为柯里化函数。举例说明如何使用它们。
32.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
// 组合函数 compose
function compose(...funcs) {
    return funcs.reduce((acc, func) => {
        return (...args) => acc(func(...args));
    }, (arg) => arg);
}

// 柯里化函数 curry
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 add(a, b) {
    return a + b;
}
function multiply(a, b) {
    return a * b;
}

// 使用柯里化
const curriedAdd = curry(add);
const result1 = curriedAdd(2)(3);
console.log(result1); // 输出: 5

// 使用组合
const composedFunc = compose(curry(multiply), curriedAdd);
const result2 = composedFunc(2)(3)(4);
console.log(result2); // 输出: 20 (先执行 add(2, 3) 得到 5,再执行 multiply(5, 4) 得到 20)