这里列出来一个简单的例子,使用箭头函数的链式调用,形成管道函数形式。
let pipeline = (...funs) => val => funs.reduce((a, b) => b(a), val);
let plus = a => a + 1;
let mult = a => a * 2;
let addThenMult = pipeline(plus, mult);
console.log(addThenMult(5));
关于 reduce() 遍历数组,返回一个操作(比如相加)后的值,而非数组,常用于数组的求合。
比如:
[1,2,3,4,5,6].reduce(function(initNum, val){return initNum + val}) // 结果: 21
上面代码等同于下面的代码:
let plus = a => a + 1;
let mult = a => a * 2;
console.log(mult(plus(5)));
编译成 ES5 后的代码如下:
var pipeline = function pipeline() {
for (var _len = arguments.length, funs = Array(_len), _key = 0; _key < _len; _key++) {
funs[_key] = arguments[_key];
}
return function (val) {
return funs.reduce(function (a, b) {
return b(a);
}, val);
};
};
var plus = function plus(a) {
return a + 1;
};
var mult = function mult(a) {
return a * 2;
};
var addThenMult = pipeline(plus, mult);
console.log(addThenMult(5));