现在,我必须在freecodecamp的练习中解决一个练习。 预期结果如下:
addTogether(2, 3)
应该返回5
。
addTogether(2)(3)
应该返回5
。
addTogether("This is sth")
应该返回undefined
。
addTogether(2, "3")
应该返回undefined
。
addTogether(2)([3])
应该返回undefined
。
通过参考一些建议的解决方案,其中一种解决方案如下:
function add(){
var args= [].slice.call(arguments);
if (!args.every(function(argument){return typeof argument === 'number';})){
return undefined;
}
if(args.length === 2){
return args[0] + args[1];
} else {
var a = args[0];
var addOne = function(b){
return add(a,b);
};
return addOne;
}
return false
}
add(2)(3)
在这里,我不太确定,为什么在变量addOne中,匿名函数在调用之前的第一个值之后会成功捕获第二个括号中的值?
我寻求有关JavaScript函数调用的信息,但仍不能100%知道为什么...
编辑: 使用闭包的功能,因为我已经提取了第一个括号,所以下一个闭包(即函数)是否会自动获取第二个输入?在这种情况下,如果我想执行addTogether(2)(3)(4)(5),那么我可以通过在不同括号内创建闭包来做到这一点,例如
var a = args[0];
var addOne = function(b){
var addTwo = function(c){
var addThree = function(d){
return a+b+c+d;
}
}
};
我理解正确吗?
答案 0 :(得分:1)
在这里,我不确定,为什么在变量addOne中, 匿名函数将成功捕获 在第二个方括号之后,在调用第一个值之前?
因为,当您说addTogether(2)
时,表示您正在调用一个函数并将其传递给整数2;而当您说addTogether(2)(3)
时,则表示您正在调用一个函数,并且向其传递整数2,然后返回一个函数,向其传递整数3。
因此,当代码显示return addOne
时,它返回的函数是用第二个括号(3)
调用的,因此addTogether
获得值2和addTogether的返回值, addOne
的值为3。