1. 目的
實(shí)現(xiàn)函數(shù)compose
舒萎,使得let composeFn = compose(fn, gn, ln)
置济,
執(zhí)行composeFn(x)
輸出fn( gn( ln(x) ) )
的執(zhí)行結(jié)果
2. 通用代碼
let compose = function (...funcs) {
var length = funcs.length;
var index = length;
while (index--) {
//確保每個(gè)參數(shù)都是函數(shù)
if (typeof funcs[index] !== "function") {
throw new TypeError("Expected a function");
}
}
return function (...args) {
var index = length - 1;
var result = length ? funcs[index].apply(this, args) : args[0];
while (--index >= 0) {
result = funcs[index].call(this, result);
}
return result;
};
};
- 有點(diǎn)類似于
Promise
將我們從callback
嵌套地獄中解救一樣 - 完全可以使用lodash的
flowRight
3. 使用場(chǎng)景
- 函數(shù)式編程含蓉,高階函數(shù)的組合式調(diào)用