首頁  >  文章  >  web前端  >  如何在 JavaScript 中將函數遞歸到深度 n ?

如何在 JavaScript 中將函數遞歸到深度 n ?

WBOY
WBOY轉載
2023-09-05 15:01:021295瀏覽

如何在 JavaScript 中将函数递归到深度 n ?

在 JavaScript 中,如果函數接受一個或多個參數並傳回一個需要剩餘參數的新函數,則該函數被視為「柯里化」。柯里化是一種強大的技術,可用於從現有函數建立新函數,或「柯里化」深度為 n 的函數。

為什麼我們要取消函數參考?

您可能想要uncurry某個函數的原因有很多。例如,您可能想要 -

  • 在需要非柯里化函數的上下文中使用柯里化函數

  • 將柯里化函數轉換為非柯里化形式,使其更易於閱讀或除錯

  • #最佳化柯​​里化函數的效能

如何取消函數參考?

有兩種方法對函數進行咖哩化 -

  • 第一種方法是使用「Function.prototype.apply」方法。

  • 第二種方法是使用「Function.prototype.call」方法。

使用「Function.prototype.apply」方法

「Function.prototype.apply」方法可用來儲存深度為n的函數。為此,您需要只需將“this”值和參數數組傳遞給“apply”方法。例如 -

<!doctype html>
<html>
<head>
   <title>Examples</title>
</head>
<body>
   <p>uncurry up to depth 2 using Function apply() method</p>
   <div id="result"></div>
   <script>
      function add(a, b) {
         return a + b;
      }
      function curriedAdd(a) {
         return function(b) {
            return a + b;
         }
      }
 
      // Uncurry the "curriedAdd" function up to depth 2:
      document.getElementById("result").innerHTML = curriedAdd.apply(null, [1]).apply(null, [2]); // 3
   </script>
</body>
</html>

使用「Function.prototype.call」方法

"Function.prototype.call" 方法也可用來將函式取消柯里化至深度 n。 「call」方法與「apply」方法類似,但您將「this」值和參數傳遞給「call」 i> 方法作為單獨的參數,而不是作為數組。例如 -

<!doctype html>
<html>
<head>
   <title>Examples</title>
</head>
<body>
   <p> uncurry up to depth 2 using Function call() method</p>
   <div id="result"></div>
   <script>
      function add(a, b) {
         return a + b;
      }
      function curriedAdd(a) {
         return function(b) {
            return parseInt(a) + parseInt(b);
         }
      }
 
      // Uncurry the "curriedAdd" function up to depth 2:
      document.getElementById("result").innerHTML = curriedAdd.call(null, [1]).call(null, [2]); // 3
   </script>
</body>
</html>

在上面的範例中,我們使用了「call」方法來對「curriedAdd」函數進行了咖哩化。正如您所看到的,"call" 方法比 "apply" 方法稍微冗長一些,但它具有相同的效果。

使用「Function.prototype.apply」方法有什麼好處?

使用「Function.prototype.apply」方法來取消函數參考有幾個好處 -

  • 「apply」方法比「call」方法更快。

  • 「apply」方法比「call」方法得到更廣泛的支持。

  • 「apply」方法比「call」方法更簡潔。

總之,柯里化是一種強大的技術,可用於從現有函數建立新函數,或「柯里化」深度為 n 的函數。

以上是如何在 JavaScript 中將函數遞歸到深度 n ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除