时,我必须编写必须由类型错误:调用函数
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