标签:let 结果 定义 最简 cti 而不是 pip reduce init
const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x);
一行代码中信息量是非常丰富的,可以从以下几个方面来分析
...
是ES6标准中的数组扩展运算符Math.max(...[1,2,3])
等价于 Math.max(1,2,3)
同时与解构赋值结合起来,用于生成数组,上述代码示例中就是使用该方法,具体例子:
[...fns] = [1,2,3]
则fns=[1,2,3]
let [a,b,c] = [1,2,3]
将上述代码示例转换一下形式:
const pipe = function(x, ...fns) {
fns.reduce((y, f) => f(y), x);
}
为了看到pipe函数的实际作用,进一步将上述函数进行拆解,用最简单的语法表示,以更清楚窥探其内部原理
function pipe(x, ...fns){
let total = x;
for(let f in fns){
total = f(total)
}
return total;
}
pipe(x, f1, f2)
时,返回f2(f1(x))代码示例
const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x);
const f1 = x => {
return x+1;
}
const f2 = x => {
return 2 * x;
}
// (1+1)*2 = 4
let result = pipe(f1, f2)(1);
console.log(result);
标签:let 结果 定义 最简 cti 而不是 pip reduce init
原文地址:https://www.cnblogs.com/chinazhonghao/p/10353597.html