譁眾取寵

Currying 是將 n arity 或 arguments 的函式轉換為僅採用一個引數的 n 函式序列。

用例:當某些引數的值在其他引數之前可用時,你可以使用 currying 將函式分解為一系列函式,以便在每個值到達時分階段完成工作。這可能很有用:

  • 當引數的值幾乎從不改變時(例如,轉換因子),但是你需要保持設定該值的靈活性(而不是將其硬編碼為常量)。
  • 當其他 curried 函式執行之前,curried 函式的結果有用。
  • 驗證功能是否按特定順序到達。

例如,矩形稜鏡的體積可以通過三個因素的函式來解釋:長度(l),寬度(w)和高度(h):

var prism = function(l, w, h) {
    return l * w * h;
}

這個函式的 curried 版本看起來像:

function prism(l) {
    return function(w) {
        return function(h) {
            return l * w * h;
        }
    }
}

Version >= 6

// alternatively, with concise ECMAScript 6+ syntax:
var prism = l => w => h => l * w * h;

你可以使用 prism(2)(3)(5) 呼叫這些函式序列,其值應為 30。

如果沒有一些額外的機制(比如庫),由於缺少佔位符值,curry 在 JavaScript(ES 5/6)中的語法靈活性有限; 因此,雖然你可以使用 var a = prism(2)(3) 建立部分應用的功能 ,但你不能使用 prism()(3)(5)