如何编写带有多个参数的 JavaScript 函数(史诗指南)

函数组合很漂亮。在之前的一篇文章中,我们研究了以下工具: compose() 和 flow()。这些组合函数允许我们创建函数管道。它们将函数排列起来,以便一个函数的输出直接流入下一个函数。当这些函数一起工作时,数据就像枫糖浆流过煎饼一样。但是当函数没有排列好时会发生什么?如果其中一些函数需要多个参数怎么办?那我们该怎么办?我们如何组合具有多个参数的函数? 这个问题的答案很简单:我们不能。 仅限一元函数组合。1 任何超过一个参数和组合都行不通。至少,没有帮助。我们不能组合接受多个参数的函数。 1“一元”函数是采用单个参数的函数。 如果无法组合多个参数的函数,那写这篇文章干嘛?标题是彻头彻尾的谎言吗? 当然,一定有 某物 我们可以做到。毕竟,那些古怪的函数式程序员永远都在赞美组合的乐趣。如果没有办法使用多参数函数,它为什么会如此受欢迎?一定有办法让它发挥作用。 并且有一个方法。 我们作弊。 我们通过改变函数来解决这个限制。也就是说,我们可以包装或修改它们。我们 转换 将多参数函数转换为一元函数。在本文中,我们将介绍五种实现此目的的技术。(还有更多,但这些是最常见的。) 复合数据结构 部分应用 柯里化 使用 ap() 对于 get/set 问题 使用 flatMap() 对于配置问题 复合数据结构 让我们从这个问题最简单的形式开始。假设我们有一个需要两个参数的函数。我们还有另一个返回两个值的函数。……除此之外,我们已经有一个问题了。函数不能返回多个值。每个函数只能返回一个值。仅此而已。2 2也不少。不过,这是完全不同的话题。 幸运的是,JavaScript 提供了多种方法来组合多个值。最常见的方法是使用复合数据结构。即数组和对象。3 例如,我们知道从一个函数返回两个值是不可能的。但在单个数组中返回两个值完全没有问题。 3有些聪明人会想:“但是,James,数组 是 对象。Map 也是。还有 Set。”这个聪明人说得对。从技术上讲,在 JavaScript 中只有一种方法可以组合值。在实践中,我们使用对象文字和数组的频率比其他数据结构更高。 如果你使用过前端框架,你可能已经见过这种情况。React 的 useState() 函数返回一个数组中的值和一个 setter 函数。它看起来像这样: const temperatureStatePair = useState(23); const temperature = temperatureStatePair[0]; […]