2016-07-06 2 views
1

私は、複数の入力セットを取り込み、すべての入力の合計を返す必要があるこの関数を持っています。例:Javascript:複数の入力セットで関数の合計を返す方法

magicFunction(1)(2)(3) => 6 

以下のコードでこれを実現しました。 'f(y)'は入力セットがなくなるまで実行されます。

function magicFunction(x) { 
    var sum = x; 

    function f(y) { 
    sum += y; 
    return f; 
    }; 
    return f; 
} 

私の問題は、私は関数が合計を返すようにしたいですが、この機能は「[機能:F]」を返します終わり。現在、この関数はこれを行います:

magicFunction(1)(2)(3) => [Function: f] 

最後の入力後に合計を返す方法がわかりません。コードが最後の入力セットに達したかどうかを確認する方法はありますか?したがって、 'return f'の代わりに、 'return sum'を実行することができます。

私は 'toString'メソッドを追加し、結果を出力するために 'console.log'を使用することを考えました。しかし、私は値を返す関数を探しています。単に値をコンソールに出力するだけではありません。

答えて

4

toStringメソッドまたはvalueOfメソッドを実装できます。

function magicFunction(x) { 
 
    var sum = x; 
 

 
    function f(y) { 
 
     sum += y; 
 
     return f; 
 
    }; 
 
    f.toString = function() { return sum; };  // for expecting string, 1st log 
 
    f.valueOf = function() { return 100 + sum; }; // for expecting numbers, 2nd log 
 

 
    return f; 
 
} 
 

 
console.log(magicFunction(2)(3)(4)); 
 
console.log(magicFunction(2)(3) + magicFunction(4)(5));

+0

私はそれについて考えましたが、コンソールにログを記録するのではなく、値を返す関数を探しています。 – davidhu2000

+0

関数*は値を返しています。彼女は単にその戻り値をコンソールに記録しています。 –

+0

'toString'を' valueOf'に置き換えた場合、違いはありません。あなたは 'var myVar = magicFunction(2)(3)(4)+ 11;'と '20 'を書くことができます。それ以外の場合は、最終結果を明示的に取得するためにゼロを追加する必要があります。私はJavaScriptの質問の元の構文でこれを可能にする方法は知らない。 – Xufox

2

あなたが最後に空のパラメータを持つmagicFunctionを呼び出し、その後に

function f(y) { 
    if(!y) { 
     return sum; 
    } 
    sum += y; 
    return f; 
} 

とFあなたの機能を変更することができます: magicFunction(1)(4)(7 )();

関連する問題