在Javascript中使用参数关闭

时间:2016-10-17 11:39:41

标签: javascript closures

这是一个简单的问题,为什么var1和var2未定义。

我试图在javascript中学习闭包并添加了一个参数,但不确定为什么它是未定义的。

    var closureFunction = function(var1,var2){  
        var privateVar = var1+var2;     

        console.log("Sum of "+ var1 +" and "+ var2+"");     
        return function(){return privateVar;} 
    }();


    console.log(closureFunction(2,3));

2 个答案:

答案 0 :(得分:3)

在函数后使用方括号()时,会立即执行。 在这种情况下,你没有传递任何参数。

它可以有两种方式。

   var closureFunction = function(var1,var2){  
        var privateVar = var1+var2;     

        console.log("Sum of "+ var1 +" and "+ var2+"");     
        return function(){return privateVar;} 
    }(2,3);  //prints 'Sum of 2 and 3'

    console.log(closureFunction()); //prints '5'

或者您可以按步骤传递参数

var closureFunction = function(var1){  

    return function(var2 ){
         console.log("Sum of "+ var1 +" and "+ var2+"");
         return var1 + var2;
     } 
}(2);  //just return a 'closure' function

console.log(closureFunction(3)); //prints 'Sum of 2 and 3 5'

或者你可以稍后再执行。

var closureFunction = function(var1){  

    return function(var2 ){
         console.log("Sum of "+ var1 +" and "+ var2+"");
         return var1 + var2;
     } 
};  

var x = closureFunction(2);  //return a 'closure' function
console.log(x(3)); //prints 'Sum of 2 and 3 5'

答案 1 :(得分:1)

你必须在关闭后调用它。

var closureFunction = function(var1, var2) {
  var privateVar = var1 + var2;

  console.log("Sum of " + var1 + " and " + var2 + "");
  return function() {
    return privateVar;
  }
};


console.log(closureFunction(2, 3)());

相关问题