ES6-箭头函数-一个部署管道机制(pipeline)的例子,
问题原因:对箭头函数不够熟悉,再加上嵌套搞混了;
让我迷糊的源码:
const pipeline = (...funcs) =>
val => funcs.reduce((a, b) => b(a), val);
const plus1 = a => a + 1;
const mult2 = a => a * 2;
const addThenMult = pipeline(plus1, mult2);
addThenMult(5)
// 12
由于对箭头函数不熟悉,一看乱糟糟的,就想不通
addThenMult的参数5到底传给谁了,,,这儿真的被自己菜到了,哈哈
于是做了如下转型:
const pipeline = function (...funcs){
return function(valt){
return funcs.reduce((a, b) => b(a), valt)
}
}
/* const pipeline = (...funcs) =>
valt => funcs.reduce((a, b) => b(a), valt);
*/
const plus1 = a => a + 1;
const mult2 = a => a * 2;
const addThenMult = pipeline(plus1, mult2);
// console.log(addThenMult)
// console.log(pipeline)
console.log(addThenMult(5))
其实到这儿就已经很明了,特地解读下这一句:return funcs.reduce((a, b) => b(a), valt) ,函数,就是用来对...funcs == [plus1, mult] 进行运算的,其中:a就代表初始值,以及每次计算后的结果,b就代表每次枚举...funcs中的
函数,valt即使传递给函数的值,reduce用法下图已经贴出来,很容易理解,接下来就是我最囧时刻,,,
我最迷的地方来了,其实很简单,,,就是:
const addThenMult = pipeline(plus1, mult2);
我一直在纠结,console.log(addThenMult(5))为什么没有传到...funcs,而是传给了valt,这个参数,,,
于是,我打印了下面这俩:
// console.log(addThenMult)
// console.log(pipeline)
控制台是这个:
瞬间清醒了,addThenMult 接收的是pipeline的返回值,也就是下面这一部分
如此,一个本来很简单的问题,自己把自己绕晕了,看来还是基础不牢固啊,特地记下来,防止以后再犯这种迷糊,,,