我正在从lodash中读取一些使用_.flow()的代码,而文档中的解释对我来说却没有任何意义。
医生说
创建一个函数,该函数返回调用给定结果的结果 函数与已创建函数的this绑定,其中每个 连续调用将提供前一个的返回值。
以示例为例:
function square(n) {
return n * n;
}
var addSquare = _.flow([_.add, square]);
addSquare(1, 2);
// => 9
我已经读过几次了,我无法弄清楚它的含义或该函数如何返回9。我能想到的最接近的想法是在函数式编程中折叠起来,但这看起来并非如此。有什么其他方法可以解释流量的变化吗?
答案 0 :(得分:3)
用更简单的术语重新定义来自文档的定义:它依次调用数组中的方法。它使用每个函数的结果作为下一个函数的参数。对于给出的示例,步骤如下:
_.add(1, 2)
,并返回3
。square(3)
。这将返回9
。答案 1 :(得分:2)
以下是此功能的source代码的相关部分:
features
因此,它首先将第一个函数应用于输入参数;然后调用其余函数,每个函数占用上一阶段的结果。
通过这种方式,我可以看到以下好处:
-如果需要,所有应用的函数将使用调用者的return function(...args) {
let index = 0
let result = length ? funcs[index].apply(this, args) : args[0]
while (++index < length) {
result = funcs[index].call(this, result)
}
return result
}
参数。
-根据定义,它只返回一个函数。这样可以进行延迟评估。流功能可以传递。实际的计算仅在应用于参数时才会进行。