JavaScript 柯里化

JavaScript 柯里化

在本文中,我们将讨论JavaScript中的柯里化。在这里,我们将看到柯里化的工作原理以及它对软件开发人员的用处。我们还将看到如何将现有的函数转换为柯里化版本。所以,这篇文章对JavaScript读者来说非常有趣和重要。在这里,您将学习JavaScript中的一个新概念。毫不拖延,让我们开始我们重要的主题,即JavaScript中的柯里化。

什么是柯里化

柯里化被定义为将具有多个参数的函数转换为具有单个参数的函数序列的过程。它是将具有更高参数数目的函数转换为参数数目较少的函数的过程。术语 arity 表示函数的参数数目。

它是函数的一个转换,将一个可调用的函数从 add(1, 2, 3) 转换为 add(1)(2)(3) 。它只是转换一个函数而不是调用它。它返回一个新函数,直到所有参数都被用完为止。

假设一个有一些参数的函数,而不是一次性获取所有参数,它先获取第一个参数,然后返回一个获取第二个参数并返回一个新函数的函数,依次类推,直到所有参数都被满足。

例如,假设一个具有三个参数A、B和C的函数 fun ,并且它返回值 res 。在柯里化之后,它将被拆分成三个函数X、Y和Z。新函数X将以A作为参数,并返回函数Y,它将以B作为参数并返回函数Z,它将以C作为参数并最终返回所需的值res。

柯里化的好处

  • 柯里化有助于防止多次传递相同的变量。
  • 它在事件处理中很有用。
  • 编写可以轻松重用和配置的小代码模块。

如何在JavaScript中实现柯里化

默认情况下(至少在当前版本中),JavaScript中没有内置的柯里化。使用一些函数技巧,我们也可以在JavaScript中实现柯里化。我们可以使用两种方法来实现柯里化:

  • 使用 bind() 方法实现
  • 使用 闭包 实现

使用bind()方法实现柯里化

JavaScript函数 bind() 方法用于创建一个新的函数。当调用函数时,它的 this 关键字被设置为提供的值,并带有一系列给定的参数。现在,让我们通过在JavaScript中使用 bind() 方法来实现柯里化。

示例

在这个示例中,我们使用 bind() 方法在JavaScript中实现柯里化。 bind() 方法将给我们一个 mul() 方法的副本,但不直接调用它。这里,我们永久地分配了第一个参数的值,然后通过分配第二个参数的值来重用 var1var2 方法。

所以,通过这种方式我们可以使用柯里化来重用我们的函数。

<html>
<body>
<script>

function mul(val1, val2){
    document.write("<p>" + val1 * val2 + "</p>");
}

let var1 = mul.bind(this, 5);
document.write("var1 method");
var1(4);
var1(7);
let var2 = mul.bind(this, 4);
document.write("var2 method")
var2(2);
var2(4);
</script>
</body>
</html>

输出

JavaScript 柯里化

柯里化利用闭包

闭包也使得JavaScript中的柯里化成为可能。闭包可以被定义为JavaScript的一个特性,其中内部函数可以访问外部函数的变量。在JavaScript中,每次创建一个函数时,就会创建一个闭包。

<html>
<body>
<script>

function mul(val1){
    return function(val2){
        document.write("<p>" + val1 * val2 + "</p>");
    }
}

let a = mul(2);
a(5);
a(6);

</script>
</body>
</html>

输出

10
12

如何将现有函数转换为柯里化版本

现在,让我们看看将现有函数转换为它的柯里化版本。

不使用柯里化

在这里,有一个简单的函数,我们没有使用柯里化。

<html>
<body>
<script>

   function multiply(a, b, c) {
            return a * b * c;
         }
document.write(multiply(2, 5, 8));
</script>
</body>
</html>

输出

80

柯里化之后

现在,我们将柯里化应用于上面的示例中的函数。让我们在JavaScript中看一个柯里化的示例。

<html>
<body>
<script>
   function multiply(a) {
      return function(b) {
         return function(c) {
            return a * b * c;
         }
      }
   }
document.write(multiply(2)(5)(8));
</script>
</body>
</html>

输出

80

在上面的代码中,我们使用了柯里化,即参数逐个传递,直到最后一个函数调用最后一个参数。因此,在对同一个函数和相同参数进行柯里化之前和之后,输出结果将保持不变。

所以,这就是这篇文章的全部内容。希望你理解了柯里化的概念和实现过程。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程