偏函式與函式柯里化
阿新 • • 發佈:2021-08-09
偏函式
偏函式就是將一個函式的引數固定後包裝為一個新函式,通過給新函式傳入引數來呼叫原來的函式。
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));