jsはadd(1)(2)(3)呼び出し方式に類似した汎用的な方法を実現する

719 ワード

var add = function(a){
    return function(b){
        return function(c){
            return a+b+c;
        };
    };
};
 
add(1)(2)(3); //6

間違いない!ではadd(1)(2)(3)(4)のような4つの呼び出しなら、これは適用されません.
これは、関数を実行して関数自体の値を返すのと同じです.
function add(x) {
    var sum = x;
    var tmp = function (y) {
        sum = sum + y;
        return tmp;
    };
    tmp.toString = function () {
        return sum;
    };
    return tmp;
}
console.log(add(1)(2)(3));  //6
console.log(add(1)(2)(3)(4));   //10

しかし、計算が完了した後もtmpという関数を返したので、計算の結果が得られません.私たちが必要とする結果は計算の数字です.では、どうすればいいのでしょうか.まず、JavaScriptでは、印刷と加算計算が、それぞれtoStringまたはvalueOf関数を呼び出すので、tmpのtoStringとvalueOfメソッドを書き直し、sumの値を返します.