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的返回值,也就是下面这一部分

 

如此,一个本来很简单的问题,自己把自己绕晕了,看来还是基础不牢固啊,特地记下来,防止以后再犯这种迷糊,,,




posted @ 2021-04-19 16:44  莫追莫缘求  阅读(207)  评论(0编辑  收藏  举报