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 函式只有一個引數。它還返回巢狀函式,該函式也接受單個引數。巢狀函式返回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>
使用者在本教程中學習了高階函式和柯里化函式。高階函式和柯里化函式有各種用途,其中一些我們已經透過三個示例看到了。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP