使用可變參數柯里化函數對值進行增量求和
我們可以創建一個行為如下的JavaScript 函數sum 嗎?
sum(1)(2) = 3 sum(1)(2)(3) = 6 sum(1)(2)(3)(4) = 10
簡而言之,該函數應該允許我們透過重複傳入額外的值來累積總和
最初,我們被告知這樣的函數在JavaScript 中是不可能的。然而,出現了另一種方法:在 sum 函數前面加上一個符號。
+sum(1)(2)(3)(4)
該符號與函數結合使用時,會將函數的回傳值強制為數字。因此,在這種情況下,函數 sum 實際上會傳回數字,然後在每次後續呼叫時遞增。
為了實現所需的行為,我們可以在 sum 函數中採用柯里化技術。實作如下所示:
function sum(n) { var v = function(x) { return sum(n + x); }; v.valueOf = v.toString = function() { return n; }; return v; } console.log(+sum(1)(2)(3)(4)); // Output: 10
此實作將 sum 函數包裝在 v 變數中,然後傳回變數。 v 函數讓我們可以逐步為 n 變數新增值。透過使用運算子將 v 強制轉換為數字,我們可以獲得累加和。
在範例中,console.log 語句輸出 10,即 1、2、3、4 的和。
以上是柯里化 JavaScript 函數如何增量求和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!