2016-10-17 19 views
1

這是一個簡單的問題,爲什麼var1和var2未定義。用Javascript中的參數關閉

我試圖學習在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)); 
+0

您沒有通過。 – Li357

+0

如何傳遞參數? – Samy

+0

不要立即調用它。 – Li357

回答

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

您必須在可用時調用閉包。

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)());