javascript中匿名函数和调用的概念

javascript中匿名函数和调用的概念,javascript,invoke,Javascript,Invoke,现在我要解决freecodecamp练习中的一个练习。 预期结果如下: addTogether(2,3)应该返回5 addTogether(2)(3)应返回5 addTogether(“这是某物”)应该返回未定义的 addTogether(2,“3”)应返回undefined addTogether(2)([3])应返回undefined 通过参考一些建议的解决方案,其中一个解决方案如下: function add(){ var args= [].slice.call(arguments)

现在我要解决freecodecamp练习中的一个练习。 预期结果如下:

addTogether(2,3)
应该返回
5

addTogether(2)(3)
应返回
5

addTogether(“这是某物”)
应该返回
未定义的

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%确定原因

编辑: 使用闭包的特性,因为我已经提取了第一个括号,下一个闭包,即函数,将自动接受第二个输入?在这种情况下,如果我想做加法(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;
     }
   }      
};
我的理解正确吗

在这里,我不太确定,为什么在变量addOne中 匿名函数将成功捕获 第二个括号,在调用之前的第一个值之后

因为,当你说,
addTogether(2)
时,意味着你调用一个函数并传递一个整数2,当你说
addTogether(2)(3)
时,意味着你调用一个函数并传递一个整数2,然后返回一个函数,传递整数3


因此,当代码说
return addOne
时,它返回的是用第二个括号调用的函数,
(3)
,因此
addTogether
得到值2,addTogether的返回值,
addOne
得到值3。

非常感谢!这意味着,使用闭包的特性,因为我已经提取了第一个括号,下一个闭包,即函数,将自动接受第二个输入?在这种情况下,如果我想做加法(2)(3)(4)(5),那么我可以通过在不同的括号中创建闭包来完成吗?@PakHangLeung这是真的。虽然这不是一个好的模式,但对于研究和学习来说,这是非常棒的。