JavaScript 中的柯里化 (Currying)2025年3月18日 | 阅读时长 4 分钟 在本文中,我们将讨论 JavaScript 中的柯里化。在这里,我们将了解柯里化如何工作以及它对软件开发人员有何帮助。我们还将了解如何将现有函数转换为柯里化版本。因此,本文对于 JavaScript 阅读者来说将非常有趣且重要。在这里,您将学习 JavaScript 中的一个新概念。废话不多说,让我们开始我们重要的主题,即 JavaScript 中的柯里化 JavaScript。 什么是柯里化?柯里化被定义为将一个具有多个参数的函数更改为一系列具有单个参数的函数。它是一个将具有更多元数的函数转换为具有更少元数的函数的过程。术语 **元数 (arity)** 表示函数中的参数数量。 它是一种函数转换,可以将函数从可以调用为 **add(1, 2, 3)** 的形式,转换为可以调用为 **add(1)(2)(3)** 的形式。它只转换函数而不是调用它。它会返回一个新函数,直到所有参数都用完为止。 假设有一个带 some 参数的函数,它不会一次性接收所有参数,而是接收第一个参数,然后返回一个接收第二个参数的新函数,该函数返回一个接收第三个参数的新函数,依此类推,直到所有参数都满足。 例如,假设有一个函数 **fun**,它有三个参数 **A、B** 和 **C**,并且它返回一个值 **res**。当它被柯里化时,它将被分解为三个函数,假设为 **X、Y** 和 **Z**。新函数 **X** 将 **A** 作为参数并返回函数 **Y**,该函数将 **B** 作为参数并返回函数 **Z**,该函数将 **C** 作为参数,并最终返回所需的值 **res**。 柯里化的好处
如何在 JavaScript 中实现柯里化?JavaScript 默认没有内置柯里化(至少在当前版本中不存在)。使用一些函数式技巧,我们也可以在 JavaScript 中实现柯里化。我们可以通过两种方法实现柯里化 -
使用 bind() 方法实现柯里化JavaScript 函数的 **bind()** 方法用于创建一个新函数。当调用一个函数时,它的 **this** 关键字被设置为提供的值,并带有一系列给定的参数。现在,让我们使用 JavaScript 中的 **bind()** 方法来实现柯里化。 示例 在此示例中,我们使用 **bind()** 方法来实现 JavaScript 中的柯里化。**bind()** 方法会给我们 **mul()** 方法的一个副本,而不会直接调用它。在这里,我们永久分配第一个参数值,然后通过分配第二个参数值来重用 **var1** 和 **var2** 方法。 因此,通过这种方式,我们可以使用柯里化重用我们的函数。 输出 ![]() 使用闭包实现柯里化闭包也使得 JavaScript 中的柯里化成为可能。闭包可以被定义为 JavaScript 的一个特性,其中内部函数可以访问外部函数的变量。在 JavaScript 中,每次函数创建时都会创建一个闭包。 输出 10 12 如何将现有函数转换为柯里化版本?现在,让我们看看如何将现有函数转换为其柯里化版本。 不使用柯里化这里有一个简单的函数,我们没有使用柯里化。 输出 80 柯里化后现在,我们将柯里化应用于上面示例中的函数。让我们看一个 JavaScript 中柯里化的例子。 输出 80 在上面的代码中,我们使用了柯里化,即参数一个接一个地传递,直到最后一个函数调用最后一个参数。因此,在对同一个函数使用柯里化之前和之后,使用相同的参数,输出将保持不变。 这就是本文的全部内容。希望您能理解柯里化的概念以及实现它的过程。 |
在本文中,我们将了解如何借助 JavaScript 从选择列表中删除选项。在本文开头,我们将学习 JavaScript、<select> 标签和 JavaScript 中的 remove 方法的一些基本方面。之后,我们将...
阅读 6 分钟
JavaScript Async Generator Function 此函数在 ES9 (ECMAScript 2018) 中引入。JavaScript 中异步生成器函数的独特之处在于它们同时支持 await 和 yield 关键字。它返回一个异步迭代器,而不仅仅是常规的 Promise 或同步迭代器。异步生成器...
7 分钟阅读
当鼠标光标移开 HTML 元素时,onmouseout 事件触发并与用户定义的功能一起工作。此函数在用户元素上运行。当鼠标光标使用事件离开时,HTML 标签和 div 信息。mouseout 函数与 mouseout...
阅读 4 分钟
JavaScript 的 previousElementSibling 属性 JavaScript 的 previousElementSibling 属性用于显示所需或输入节点的前一个节点作为 Node 对象。如果给定节点是列表的初始元素,则节点对象显示为 null。previousElementSibling 属性用于...
阅读 3 分钟
?数字的阶乘是所有正降序整数的乘积。n 的阶乘表示为 n!。例如 - 4! = 4 * 3 * 2 * 1 = 24 5! = 5 * 4 * 3 * 2 * 1 = 120 在这里,4! 是...
阅读 3 分钟
什么是 URL? URL 是 Web 地址的另一种说法。例如,基于单词的 URL 是 TpointTech.com。URL 也可以使用 IP 地址创建(例如 192.168.2.24)。大多数消费者在进行在线搜索时会提供名称地址,因为名称是……
阅读 3 分钟
? JavaScript中的Promise乍一看可能有些复杂,但实际上它相当简单,而且不是什么难事。在JavaScript中,Promise就像你在现实生活中做出的承诺一样,用来表明你...
阅读 4 分钟
JavaScript Date.now() 方法 JavaScript Date.now() 函数用于显示自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的时间。它将以毫秒为单位返回值。由于 now() 是 Date 对象的静态方法,因此它始终作为 Date.now() 使用。我们不能使用...
阅读 2 分钟
JavaScript 的 focusout 事件是当元素即将失去焦点时执行的事件处理程序。除此之外,我们还学习了 blur,它也是 JavaScript 中使用的事件处理程序。blur 和 focusout 都是焦点...
阅读 3 分钟
在本教程中,我们将了解如何在 JavaScript 中管理 <select> 选项。HTML Select 选项 <select> 选项为我们提供了选项列表。它允许我们选择一个或多个选项。我们使用 <option> 和 <select> 元素来形成 <select>...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India