最近我在一次採訪中提出了一個問題,這兩個輸出將會是相同的總和(2,3)和總和(2)(3),即5「。編寫一個功能,其中「sum(2,3)」和「sum(2)(3)」的輸出將爲5
請給出任何想法,如果有可能的話。
在此先感謝
最近我在一次採訪中提出了一個問題,這兩個輸出將會是相同的總和(2,3)和總和(2)(3),即5「。編寫一個功能,其中「sum(2,3)」和「sum(2)(3)」的輸出將爲5
請給出任何想法,如果有可能的話。
在此先感謝
對於sum(x)(y)
,有sum(x)
返回另一個函數f,使得f(y)
- 即。 (sum(x))(y)
- 評估結果正確。請參閱Eloquent JavaScript: Higher-Order Functions關於如何關閉 - 以及從函數返回函數的示例 - 使這成爲可能。當用單數參數調用任一即時之和,對於sum(x, y)
或前述'curried' function:
的arguments.length
屬性可用於確定有多少參數都被提供給第(sum
)函數和相應的反應。
(鏈接的「咖喱JavaScript函數:不,不是咖喱辣,但咖喱類lambda-微積分」文章實際上包含一個完整的解決方案..但它覺得提供代碼在這裏將是作弊。)
我不認爲這會是「作弊」,相反它會有幫助,因爲鏈接可能永遠不存在(只需在包含代碼時給予獎勵)。也有人懶惰,可能不想去另一個網頁並尋找它。 –
這是你的簡單功能,無需計數ARGS:
function sum(a,b){
if(b===undefined){
return function(c){ return parseInt(a)+parseInt(c);}
}
return parseInt(a)+parseInt(b);
}
console.log(sum(2,3));
console.log(sum(2)(3));
'b ='''在某些瀏覽器中不起作用(* Chrome *)。 –
總和(2)(3)...是不可能的 – Rakin
@Rakin有可能在JavaScript中。代碼'result = sum(2)(3)'與'f = sum(2)'實際上是一樣的。結果= f(3)',沒有中間變量。這是因爲JavaScript函數本身就是(第一類)值。 – user2864740
很棒..新信息謝謝@ user2864740 – Rakin