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]; // 创建函数来过滤值 function filter_func(element) { return element % 2 == 0; } // 高阶函数 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>
现在,用户可以了解使用高阶函数的好处。例如,JavaScript 的 Array 库中已经实现了 filter() 方法,允许用户通过将自定义回调函数作为参数传递来覆盖过滤器逻辑。
JavaScript 中的 Currying
currying 类似于高阶函数,它返回函数。curried 函数接受多个参数,用户可以将该 argument 值传递给嵌套函数。
curried 函数的最后一个嵌套函数返回最终输出。
语法
用户可以按照以下语法编写 curried 函数。
function addition(num1) { return function (num2) { return num1 + num2; }; } addition(10)(20);
我们在上述语法中从 addition() 函数返回函数。此外,用户可以观察我们如何通过传递多个参数来调用 addition() 函数。
示例
在下面的示例中,我们创建了名为 addition() 的柯里化函数。加法函数只有一个参数。它还返回嵌套函数,该函数也接受一个参数。嵌套函数返回 num1 和 num2 参数的总和。
<html> <body> <h2>Curried functions</h2> <p id = "output"> </p> <script> let output = document.getElementById("output"); // 柯里化函数,返回函数 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>
用户在本教程中了解了高阶函数和柯里化函数。高阶和柯里化函数有多种用途,其中一些我们已经通过三个示例了解。