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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.