2016-07-25 55 views
0

我正在爲freecodecamp做一個練習,我必須創建一個將兩個參數彙總在一起的函數。如果只提供一個參數,則返回一個需要一個參數並返回總和的函數。在javascript中使用閉包總結兩個參數

例如,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」)應該返回「未定義'

我想我在檢查參數的方式失敗。我已經嘗試了很多diferents配置,我卡住了。任何建議?

謝謝

+0

FYI這就是所謂的鑽營。 – gcampbell

+0

你是什麼意思?不是閉包嗎?這是你在一些網站上得到的定義,包括developer.mozilla – galeonweb

+0

它使用閉包,但是像這樣分解函數的技術被稱爲[currying](http://stackoverflow.com/questions/36314/what-is-currying )。 – gcampbell

回答

-1

使用閉包添加數字。幾條線被評論,以表明如何調用內部函數。 Ref:closure and IIFE in 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