2016-07-25 3 views
0

私は2つの引数を合計する関数を作成する必要があるfreecodecampの練習をしています。引数が1つしかない場合は、1つの引数を必要とする関数を返し、その合計を返します。javascriptのクロージャを使用して2つの引数を合計する

たとえば、addTogether(2,3)は5を返し、addTogether(2)は関数を返す必要があります。

私のコードは次の通りである:

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

function isFunction(functionToCheck) { 
var getType = {}; 
return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; 
} 

function addTogether() { 
    var args = Array.prototype.slice.call(arguments); 
    var param1=args[0]; 

    var sum=function(){ 
    var argSub=Array.prototype.slice.call(arguments); 
    var param2=argSub[0]; 
    if (isNumber(param2)) 
     return; 
    else 
     return param1+param2; 
    }; 

    if (args.length===1){ 
    return sum; 
    } else if (isNumber(param1)){ 
    return param1+args[1]; 
    } 
} 

addTogether(2,3); 

私はaddTogetherは(2)(3)5を返す必要がない、と私はaddTogetherを実行したとき(2、 "3")「undefinedを返す必要がある場合には'

私はparamsをチェックしているように私は失敗していると思います。私は多くの異なる設定を試して、私は立ち往生しています。何かアドバイス??

ありがとうございました

+0

はFYIこれはカリー化と呼ばれています。 – gcampbell

+0

あなたはどういう意味ですか?閉鎖じゃない?これはdeveloper.mozillaを含むいくつかのWebサイトでの定義です。 – galeonweb

+0

クロージャを使用していますが、このような関数を分解するテクニックは[currying](http://stackoverflow.com/questions/36314/what-is-currying)と呼ばれています。 )。 – gcampbell

答えて

-1

数字を追加するためのクロージャの使用。いくつかの行は、内部関数がどのように呼び出されているかを示すためにコメントされています。 Ref:クロージャーとIIFE(Javascript)。

function sum(x) { 
 
    var input = x; 
 

 
    function add(y) { 
 
    return input + y; 
 
    } 
 
    return add; 
 
} 
 
//var sum1 = sum(2); 
 
//console.log(sum1(3)); // 5 
 
console.log(sum(2)(3)); //5

関連する問題