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

时间:2018-09-10 21:36:24

标签: javascript invoke

现在,我必须在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;
     }
   }      
};

我理解正确吗?

1 个答案:

答案 0 :(得分:1)

  

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

因为,当您说addTogether(2)时,表示您正在调用一个函数并将其传递给整数2;而当您说addTogether(2)(3)时,则表示您正在调用一个函数,并且向其传递整数2,然后返回一个函数,向其传递整数3。

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