JavaScript 中的高阶函数和柯里化


在任何编程语言中,函数都是一个非常有用的特性。开发人员可能能够找到任何不包含函数的编程语言。此外,当我们开始学习任何编程语言时,我们肯定都会学习函数,它是一段代码块,提供代码的可重用性。

在本教程中,我们将学习高阶函数和柯里化。

高阶函数

在我们开始在 JavaScript 中进行柯里化之前,让我们先了解一下高阶函数。

高阶函数的简单定义是:一个函数,它将另一个函数作为参数或返回一个函数。您是否曾经在 JavaScript 或其他任何编程语言(如 C++ 或 Python)中使用过 sort() 方法?如果是,您可能已将回调函数作为参数传递给sort()方法,以根据特定上下文对数组进行排序。

因此,我们可以说sort()方法是高阶函数。

语法

用户可以按照以下语法使用高阶函数。

function sortArray(ele1, ele2) {
   
   // function body
}
array.sort(sortArray);

在上面的语法中,sort()是一个高阶函数,因为我们已将sortArray()函数作为参数传递。

示例

在下面的示例中,我们创建了一个包含不同数字值的数字数组。之后,我们使用filter()方法过滤数组中所有能被 2 整除的元素。

用户可以观察到,我们已将filter_func()函数作为filter()方法的参数传递。因此,我们可以说filter()方法是一个高阶函数。

<html>
<body>
   <h2>Higher-order functions using the filter() method.</h2> 
   <p id = "output"> </p>
   <script>
      let output = document.getElementById("output");
      let array = [10, 30, 23, 32, 32, 32, 32, 45, 5, 6, 878989, 34, 23];
      
      // creating the function to filter values
      function filter_func(element) {
         return element % 2 == 0;
      }
      
      // higher-order function
      let divisibleBy2 = array.filter(filter_func);
      output.innerHTML += "The filtered values are " + divisibleBy2;
   </script>
</body>
</html>

示例

在此示例中,我们创建了字符串数组。之后,我们使用map()方法将所有数组值的第一个字母大写。我们将回调箭头函数作为 map 方法的参数传递,该函数在将第一个字符大写后返回字符串。

我们使用substr()toUpperCase()方法将每个数组字符串的第一个字符大写。

<html>
<body>
   <h2>Higher-order functions using the map() method</h2>
   <p id = "output"> </p>
   <script>
      let output = document.getElementById("output");
      let array = ["hi", "users", "welcome", "on", "tutorialspoint!"];
      output.innerHTML += "Original Array: <br>" + array + "<br>";
      
      // higher-order function
      let results = array.map((string) => {
         
         // creating the first character capitalize
         return string.substr(0, 1).toUpperCase() + string.substr(1);
      });
      output.innerHTML += "<br>The array after capitalizing the first character: <br>" + results;
   </script>
</body>
</html>

现在,用户可以了解使用高阶函数的好处。例如,filter()方法已在 JavaScript 的 Array 库中实现,允许用户通过将自定义回调函数作为参数传递来覆盖过滤逻辑。

JavaScript 中的柯里化

柯里化类似于高阶函数,它返回函数。柯里化函数接受多个参数,用户可以将该参数值传递给嵌套函数。

柯里化函数的最后一个嵌套函数返回最终输出。

语法

用户可以按照以下语法编写柯里化函数。

function addition(num1) {
   return function (num2) {
      return num1 + num2;
   };
}
addition(10)(20);

我们在上面的语法中从addition()函数返回函数。此外,用户还可以观察到我们如何通过传递多个参数来调用addition()函数。

示例

在下面的示例中,我们创建了一个名为addition()的柯里化函数。addition 函数只有一个参数。它还返回嵌套函数,该函数也接受单个参数。嵌套函数返回num1num2参数的总和。

<html>
<body>
   <h2>Curried functions</h2>
   <p id = "output"> </p>
   <script>
      let output = document.getElementById("output");
      
      // curried function, which returns the function
      function addition(num1) {
         return function (num2) {
            return num1 + num2;
         };
      }
      output.innerHTML += "After calling the curried function, the result is " + addition(10)(20);
   </script>
</body>
</html>

用户在本教程中学习了高阶函数和柯里化函数。高阶函数和柯里化函数有各种用途,其中一些我们已经通过三个示例看到了。

更新于: 2023年3月10日

217 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告