JavaScript 高阶函数和柯里化
在任何编程语言中,函数都是一个非常有用的特性。开发者可能无法找到任何一个不包含函数的编程语言。当我们开始学习任何编程语言时,我们肯定会学习函数,它是提供代码可重用性的代码块。
在本教程中,我们将学习高阶函数和柯里化。
高阶函数
在我们开始学习JavaScript中的柯里化之前,让我们首先了解高阶函数。
高阶函数的简单定义是:一个接受另一个函数作为参数或返回一个函数的函数。你是否使用过JavaScript中的sort()方法或其他编程语言如C++或Python?如果是的,你可能已经将回调函数作为参数传递给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函数只有一个参数。 它还返回嵌套的函数,该函数也只接受一个参数。 嵌套的函数返回 num1 和 num2 参数的总和。
<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>
用户在本教程中学到了 高阶 函数和柯里化函数。高阶和柯里化函数有着各种用途,其中我们通过三个示例看到了其中一些。