関数のカリー化 (currying) を JavaScript (ES5/ES6) で書いたサンプルコードをご紹介します。
 
function resultFn に value method を定義して、関数自体を return resultFn; で返してるのがポイントです。
関数もオブジェクトなので function resultFn も var resultFn でもオブジェクトなので、それに resultFn.result = function () {} と result method を定義できます。
参考:関数もオブジェクトである - JavaScriptの関数とメソッド:CodeZine(コードジン)
function resultFn 関数の例
function add(x) {
    var sum = x;
    function resultFn(y) {
        sum += y;
        return resultFn;
    }
    resultFn.result = function () {
        return sum;
    };
    return resultFn;
}
var resultFn = function (y) {} メソッドの例
function add(x) {
    var sum = x;
    var resultFn = function (y) {
        sum += y;
        return resultFn;
    };
    resultFn.result = function () {
        return sum;
    };
    return resultFn;
}
function resultFn 関数の例
function add(x) {
    let sum = x;
    function resultFn(y) {
        sum += y;
        return resultFn;
    }
    resultFn.result = function () {
        return sum;
    };
    return resultFn;
}
const resultFn = (y) => {} メソッドの例
function add(x) {
    let sum = x;
    const resultFn = (y) => {
        sum += y;
        return resultFn;
    };
    resultFn.result = function () {
        return sum;
    };
    return resultFn;
}
> add(2)(3)(4).result
[Function]
> add(2)(3)(4).result()
9
以上、JavaScript で関数のカリー化 (currying) のサンプルコードを書いてみた、現場からお送りしました。