柯里化
柯里化(currying)指的是將一個多參數的函數拆分成一系列函數,每個拆分后的函數都只接受一個參數(unary)。
柯里化前:
//柯里化前
function add (a, b) {
return a + b;
}
add(1, 1) // 2
改寫成柯里化函數形式:
function add (a) {
return function (b) {
return a + b;
}
}
// 或者采用箭頭函數寫法
const add = x => y => x + y;
const f = add(1);
f(2) // 3
即,拆分成了兩個函數,每個函數接受一個參數。
代碼中,函數 add 只接受一個參數 a,返回一個函數 f 。函數 f 也只接受一個參數 b。
函數合成
const compose = f => g => x => f(g(x));
const f = compose (x => x * 4) (x => x + 3);
f(2) // 20
代碼中,compose 就是一個函數合成器,用于將兩個函數合成一個函數。
柯里化與函數合成有著密切的聯系。前者用于將一個函數拆成多個函數,后者用于將多個函數合并成一個函數。
參考連接
- 阮一峰, ECMAScript 6 入門