時,我必須編寫必須由類型錯誤:調用函數
sum(2,3); //5
//or
sum(2)(3); //5
我寫這篇文章的代碼
function sum (a,b){
return a + b;
}
sum(2,3);
我也得到調用一個函數數量不是一個函數'TypeError:數字不是函數'。爲什麼?
時,我必須編寫必須由類型錯誤:調用函數
sum(2,3); //5
//or
sum(2)(3); //5
我寫這篇文章的代碼
function sum (a,b){
return a + b;
}
sum(2,3);
我也得到調用一個函數數量不是一個函數'TypeError:數字不是函數'。爲什麼?
你可以這樣做:
function sum(a,b) {
return arguments.length>1? a+b : function (b) { return a + b };
}
你最好檢查'arguments .length'相等2.'sum(1,0)'將失敗。 –
現在通過使用arguments.length> 0修復了 – Hazem
只能調用這個方法的功能。
sum(2,3);
爲什麼?功能可以返回另一個功能。 –
但是在上面的問題中,他們沒有返回函數。這就是我說的原因。 – Tabish
我相信這就是爲什麼OP要求幫助:)他不能以他想要的方式調用他的功能。爲什麼?怎麼修?你的回答只能說明他的代碼不起作用。 –
你應該使用curried功能:
function sum(a, b) {
if (b === undefined) {
return function (b) {
return a + b;
}
}
return a + b;
}
// sum(1, 2) === sum(1)(2)
如果'b'爲0會怎麼樣。 –
@YuryTarabanko好點。更新。 – Vidul
當前最佳答案。 Svend Tofte曾經在很久以前寫過關於它的文章,克羅克福德和他複製了這篇文章,很好閱讀:http://www.crockford.com/javascript/www_svendtofte_com/code/curried_javascript/index.html。編輯:*實際使用*:http://stackoverflow.com/questions/113780/javascript-curry-what-are-the-practical-applications。基本上,這只是使用*閉包*來實現這個概念。順便說一句,也可以使用'new Function'。 – GitaarLAB
*「我必須編寫必須由調用一個函數」 *爲什麼呢?另外:你不能(合理地)這樣做。 –
執行它作爲'sum(2,3)'將* not *給你所描述的TypeError!猜你的意思是:'sum(2)(3)'。關於你的字面問題**爲什麼**:你當前的函數返回一個數字(數字a +數字b是一個數字..如果(其中一個)參數是一個字符串,那麼你會得到一個字符串作爲回報,這是。 .. *也*不是一個函數)。然後你試着執行'()'這個返回的數字(這不是一個函數),傳遞參數值'3'。但是由於這個數字不是一個函數,所以你得到的只是一個TypeError ...是的,我不能幫助自己,但是再次..你問了「爲什麼」的問題...... – GitaarLAB