2016-07-06 59 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; 
} 

我的問題是我想要函數返回總和,但是這個函數會在最後返回'[Function:f]'。所以目前,功能是這樣的:

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

我想不出如何返回最後一次輸入後的總和。有沒有一種方法可以檢查代碼是否到達最後一個輸入集?因此,我可以運行'返回總和'而不是'返回f'。

我想添加'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

如果用'valueOf'代替'toString',則不會有區別。你可以寫'var myVar = magicFunction(2)(3)(4)+ 11;'並獲得'20'。否則,你需要添加零來明確得到最終結果。我不知道有什麼方法可以用JavaScript中問題中的原始語法來實現。 – Xufox

2

你可以改變你函數f

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

,然後調用帶有空參數的magicFunction在最後: magicFunction(1)(4)(7 )();