Javascript 为什么我的闭包函数不能工作?

Javascript 为什么我的闭包函数不能工作?,javascript,closures,Javascript,Closures,下面的函数在1个参数内添加参数。例如,它计算addTogether(2,3)=5和addTogether(2,“3”)=未定义的 但是,它无法计算addTogether(2)(3)=5,而是给我一个错误,“addTogether(…)不是函数”。闭包函数(返回函数(x))应该包含在addTogether(2)(3)中的第二个参数中,我不明白为什么它不起作用 函数addTogether(){ if(参数类型[0]!=“数字”| |参数类型[1]!=“数字”){ 返回未定义; }//无害但无必要

下面的函数在1个参数内添加参数。例如,它计算
addTogether(2,3)=5
addTogether(2,“3”)=未定义的

但是,它无法计算
addTogether(2)(3)=5
,而是给我一个错误,“addTogether(…)不是函数”。闭包函数(
返回函数(x)
)应该包含在
addTogether(2)(3)
中的第二个参数中,我不明白为什么它不起作用

函数addTogether(){
if(参数类型[0]!=“数字”| |参数类型[1]!=“数字”){
返回未定义;
}//无害但无必要
var总和=0;
var num=参数[0];
if(arguments.length==1){
//如果原始函数中只有一个参数。。。
if(参数类型[0]!=“数量”){
返回未定义;
//如果参数[0]不是数字,则返回未定义
}
返回函数(x){
if(参数类型[0]!=“数量”){
返回未定义;
//在closure/2nd函数中,如果第一个参数不是数字,则不提供和
}否则{
sum=num+x;//x=第二个给定参数
回报金额;
}
};
}
if(参数类型[0]=“数量”&&typeof参数类型[1]=“数量”){
对于(var x=0;x控制台日志(加在一起(2)(3))
如果希望函数像addTogether(2)(3)那样工作,这意味着
addTogether
必须接受一个参数并返回一个函数
addTogether(2)
此调用将返回一个新函数,然后使用第二个参数调用返回的函数

在你的情况下,当你比较

if (typeof arguments[0] !== "number" || typeof arguments[1] !== "number") 
并使用一个参数调用函数,第二个
参数类型[1]!=“number”
返回
true
,因为第二个参数是
未定义的
,所以它不是一个数字,函数返回
未定义的

在代码中,您还可以删除一些条件。因为上面的条件已经检查过了

函数addTogether(){
if(参数类型[0]!=“数字”){
返回未定义;
} 
var总和=0;
var num=参数[0];
如果(arguments.length==1){
返回函数(x){
if(参数类型[0]!=“数量”){
返回未定义;
}否则{
sum=num+x;
回报金额;
}
};
}
if(参数类型[0]=“数量”&&typeof参数类型[1]=“数量”){
对于(var x=0;x控制台日志(加在一起(2)(3))
如果希望函数像addTogether(2)(3)那样工作,这意味着
addTogether
必须接受一个参数并返回一个函数
addTogether(2)
此调用将返回一个新函数,然后使用第二个参数调用返回的函数

在你的情况下,当你比较

if (typeof arguments[0] !== "number" || typeof arguments[1] !== "number") 
并使用一个参数调用函数,第二个
参数类型[1]!=“number”
返回
true
,因为第二个参数是
未定义的
,所以它不是一个数字,函数返回
未定义的

在代码中,您还可以删除一些条件。因为上面的条件已经检查过了

函数addTogether(){
if(参数类型[0]!=“数字”){
返回未定义;
} 
var总和=0;
var num=参数[0];
如果(arguments.length==1){
返回函数(x){
if(参数类型[0]!=“数量”){
返回未定义;
}否则{
sum=num+x;
回报金额;
}
};
}
if(参数类型[0]=“数量”&&typeof参数类型[1]=“数量”){
对于(var x=0;x
如果(参数类型[0]!=“number”| |参数类型[1]!=“number”)
已经导致
相加(2)
返回
未定义的

将该
if
语句放在函数末尾或将该
|
转换为
&
可以修复该问题。

如果(参数类型[0]!==“number”| |参数类型[1]!==“number”)
已经导致
一起添加(2)
返回
未定义的


if
语句放在函数末尾,或将
|
转换为
&&
将修复此问题。

感谢您的帮助,但是(return function(x))不返回该新函数吗?我不知道怎么修理this@Pythonnoob编辑谢谢你的帮助,但是(返回函数(x))不返回那个新函数吗?我不知道怎么修理this@Pythonnoob编辑的
if(参数类型[0]!=“number”|参数类型[1]!=“number”)
已导致
addTogether(2)
返回
undefined
^如果只传递一个参数,
参数类型[1]!==“number”
true
(因为
typeof arguments[1]
将返回
“undefined”
)。注释“无害但无必要”是错误的。这是不必要的,也是有害的。@Xufox将其转化为答案。FWIW,您可以很容易地找到函数不返回func的原因