2016-06-23 6 views
0

任意の数の出力を受け入れ:使用JavaScriptのクロージャ(A)(B)(A)(B)は、例えば、+ bを= B + =と和のためのブラケット

和(1 1)(2)= 6

和(6) - ( - 1)( - 2)( - 3)= 0

)(2)3

和(5)(=目的は、任意の数の入力引数を受け入れることです。

私はこの質問に適切な解決策を見てきました。 私の方法は私の方法が機能しない理由です。

右溶液:

function sum(a){ 
    var sum = a 
    function f(b){ 
     sum += b 
     return f 
    } 
    f.toString = function(){return sum} 
    return f 
} 

マイ方法:

function add(a){ 
    function add1(b){ 
     if(b === undefined){ 
      console.log(a); 
      return; 
     } 
     else{ 
      return add(a+b); 
     } 
    } 

    if(a === undefined){ 
     console.log(a); 
     return; 
    } 
    else{ 
     return add1;  
    } 
} 

試験データ:(2)(4)を追加し、(4)を追加します。 両方のテストケースで、ブランチ "a === undefined"または "b === undefined"には決して達しません。私はこれについて非常に混乱しています。 aとbが機能するためのパラメータであるためです

+0

最初の呼び出しで 'a'をデフォルトの' 0'に設定しない限り、 'if(a === undefined){'は必要ありません。呼び出し元が 'add'を呼び出す唯一の時間は最初の呼び出しです。その後、 'add'は内部的にのみ呼び出されるので、呼び出し側は最初の呼び出しの後に常に' add1'を取得します。 –

+0

@Guedesはい、それが理由です。ありがとう。 –

+0

@squintはい、 'if(a === undefined){'は不要です。私はそれを削除した後、私は関数 'add()'が関数 'add1'を返すだけで、それは基本的に正しい解と同じです。 –

答えて

1

In both test cases, branch "a === undefined" or "b === undefined" will never be reached

。彼らはあなたが例えば最後に空の()を追加する場合、PARAMTERに値を渡すかのようなadd()add(5)()add(5)(void(0))

あなたの機能が動作する値として未定義渡さずに関数を呼び出す必要がありどちらか未定義持っているために、 add(7)(8)(9)()

+0

私はお試しください。出来た。ありがとう。 –

関連する問題