【问题标题】:What does the lodash flow function do?lodash 流函数有什么作用?
【发布时间】:2018-11-28 00:07:20
【问题描述】:

我正在阅读一些使用来自 lodash 的 _.flow() 的代码,文档中的解释对我来说没有意义。

医生说

创建一个返回调用给定结果的函数 函数与创建函数的 this 绑定,其中每个 为连续调用提供前一个的返回值。

举个例子:

function square(n) {
  return n * n;
}

var addSquare = _.flow([_.add, square]);
addSquare(1, 2);
// => 9

我已经读了几遍了,但我无法弄清楚它的含义或该函数如何返回 9。我能想到的最接近的想法是在函数式编程中折叠,但这看起来不像那样。有没有其他方法可以解释流程的作用?

【问题讨论】:

  • 好像在做:(1+2)^2 = 9.

标签: javascript lodash


【解决方案1】:

用更简单的术语重新定义文档中的定义:它按顺序调用数组中的方法。它使用每个函数的结果作为下一个函数的参数。在给出的例子的情况下,步骤如下:

  1. 调用_.add(1, 2),返回3
  2. 将该返回值作为参数传递给数组中的下一个函数,该函数变为square(3)。这将返回 9

【讨论】:

  • 啊,所以它只是功能应用程序?
  • 是的,它本质上只是对任意数量的函数执行x(y(z))
【解决方案2】:

这里是这个函数的source代码的相关部分:

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
}

所以它首先将第一个函数应用于输入参数;然后调用其余函数,每个函数都占用上一阶段的结果。

我可以看到这样做的以下好处: - 如果需要,所有应用的函数都将使用调用者的this 参数。 - 在定义上,它只返回一个函数。这允许惰性评估。流函数可以传递。实际计算只有在应用于参数时才会发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    相关资源
    最近更新 更多