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

Concept about anonymous function and invoke in javascript

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

addTogether(2, 3) 应该 return 5.

addTogether(2)(3) 应该 return 5.

addTogether("This is sth") 应该 return undefined.

addTogether(2, "3") 应该 return undefined.

addTogether(2)([3]) 应该 return 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;
     }
   }      
};

我理解的正确吗?

In here, I am not really sure, why in the variable addOne, the anonymous function will successfully capture the the value in the second brackets, after calling the first value before?

因为,当你说 addTogether(2) 时,它意味着你正在调用一个函数并向它传递一个整数 2,而当你说 addTogether(2)(3) 时,它意味着你正在调用一个函数并将整数 2 传递给它,然后 return 调用一个函数,您将整数 3 传递给该函数。

所以,当代码说 return addOne 时,它是 returning 用第二个括号 (3) 调用的函数,所以 addTogether 得到值2和addTogether的return,即addOne得到值3.