通过使用参数来区分js函数

时间:2016-04-25 05:28:16

标签: javascript jquery html function javascript-events

有什么区别:

// Example 1 sum(8,2)
console.log(sum(8,2));   // Outputs what??
// Example 2 sum(8)(2)
console.log(sum(8)(2));  // Outputs what??

function sum(x,y) {
return x+y;
}

function sum(x) { 
  return function(y){
     return x+y;
     }

}

为什么一个用于另一个以及为什么?

2 个答案:

答案 0 :(得分:3)

您要做的是Function Currying

试试这个:

function sum(x) { 
   return function(y) { return x + y; } 
}; 
var sumWith4 = sum(4); 
var finalVal = sumWith4(5);
finalVal = sumWith4(8);

其中一个优点是它有助于重用抽象函数。例如,在上面的示例中,我可以重复使用sumWith4将4添加到任何数字,而不显式调用sum(4,5)。这是一个非常简单的例子。有些情况下,部分功能将根据第一个参数进行评估,而另一部分则根据第二个参数进行评估。因此,您可以通过为其提供第一个参数来创建部分函数,​​然后针对多个不同的第二个参数重复使用部分函数。

答案 1 :(得分:0)

我将假设你的意思是要求调用函数的区别,如: -

  1. someFunction(x,y)
  2. someFunction(X)(Y)
  3. 使用 Closures 会发生这种情况,这恰好是一个内部功能可以承载创建它的环境的概念。

    var sum = function (x){
      return function(y) {
         return x+y;
      };
    };
    
    var addWith5 = sum(5);
    /* 
       This will return a function and not a value
       addWith5 = function(y){return 5+y;}; 
    */
    console.log(addWith5(5)); // this will return 11
    /*
       You can also use add function directly
    */
    console.log(sum(5)(6)); // this will return 11
    /* 
       The function returned by sum(5), gets called with the parameter (6)
    */
     //Try using this, to make it more clear
     function a(x){ 
       return x;
     }(5);
     // returns 5
    

    修改 删除了“闭包是一个JS概念。”