下面的函数可以在 1 个括号内添加参数。例如,它计算 addTogether(2,3) = 5
和 addTogether(2,"3") = undefined
。
但是,它无法计算 addTogether(2)(3) = 5
,而是给出错误“addTogether(...) 不是函数”>。闭包函数(return function(x)
)应该接受 addTogether(2)(3)
中的第二个参数,但我不明白它为什么这样做不工作。
function addTogether() {
if (typeof arguments[0] !== "number" || typeof arguments[1] !== "number") {
return undefined;
} //not harmful but not necessary
var sum = 0;
var num = arguments[0];
if (arguments.length === 1) {
//if only 1 argument in the original function...
if (typeof arguments[0] !== "number") {
return undefined;
//returns undefined if arguments[0] isnt a number
}
return function(x) {
if (typeof arguments[0] !== "number") {
return undefined;
//in the closure/2nd function, if first argument isnt a number then no sum will be provided
} else {
sum = num + x; //x = second given argument
return sum;
}
};
}
if (typeof arguments[0] === "number" && typeof arguments[1] === "number") {
for (var x = 0; x < arguments.length; x++) {
if (typeof arguments[x] === "number") {
sum += arguments[x];
//add the argument[0] and [1] if both are number types, not string or array types or any other types
} else {
sum = undefined;
}
}
return sum;
}
// the above "if" statement is rsponsible for achieving addTogether(2,3) = 5;
}
console.log(addTogether(2)(3));
最佳答案
如果您希望您的函数像 addTogether(2)(3)
一样工作,这意味着您的
addTogether
必须接受一个参数并返回一个函数。 addTogether(2)
此调用将返回一个新函数,然后使用第二个参数调用返回的函数。
根据您的情况进行比较
if (typeof arguments[0] !== "number" || typeof arguments[1] !== "number")
并使用一个参数调用该函数,第二个 typeof argument[1] !== "number"
返回 true
,因为第二个参数是 undefined
,所以它不是一个数字,并且您的函数返回undefined
。
在您的代码中,您还可以删除一些条件。因为上面的条件已经检查了它们。
function addTogether() {
if (typeof arguments[0] !== "number") {
return undefined;
}
var sum = 0;
var num = arguments[0];
if (arguments.length === 1) {
return function(x) {
if (typeof arguments[0] !== "number") {
return undefined;
} else {
sum = num + x;
return sum;
}
};
}
if (typeof arguments[0] === "number" && typeof arguments[1] === "number") {
for (var x = 0; x < arguments.length; x++) {
if (typeof arguments[x] === "number") {
sum += arguments[x];
} else {
sum = undefined;
}
}
return sum;
}
}
console.log(addTogether(2)(3));
关于javascript - 为什么我的闭包函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41800249/