1. 程式人生 > 其它 >偏函式與函式柯里化

偏函式與函式柯里化

偏函式

偏函式就是將一個函式的引數固定後包裝為一個新函式,通過給新函式傳入引數來呼叫原來的函式。

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));