偏函数与函数柯里化

偏函数

偏函数就是将一个函数的参数固定后包装为一个新函数,通过给新函数传入参数来调用原来的函数。

function add(a, b) {
    return a + b;
}

function addTwo(num) {
    return add(2, num);
}

console.log(addTwo(3));

有点类似设计模式里适配器模式。

柯里化

在偏函数的基础上加上了闭包的思想,通过在函数中返回一个函数来实现:

function curryAdd(num) {
    return function (onum) {
        return num + onum;
    };
}
let addTwo = curryAdd(2);
console.log(addTwo(3)); // 5

更高级的写法,这样固定了函数一个或多次传入的值的总数量

function curriedIt(func) {
    return function curriedFn(...arg) {
        if (arg.length < func.length) {
            //如果收集参数数量小于形参个数,返回一个新函数,用来调用自己
            return function (...newArg) {
                return curriedFn(...arg.concat(newArg));
            };
        }
        return func(...arg);
    };
}
let curriedAdd = curriedIt((a, b, c) => {
    return a + b + c;
});
console.log(curriedAdd(1)(2)(3));
console.log(curriedAdd(1, 2)(3));

偏函数与函数柯里化

上一篇:DISUBSTR - Distinct Substrings


下一篇:pytest02