2012-12-21 91 views
5

我想使用帶參數的內聯函數來設置變量。這裏是一個歸結版本(這顯然是唯一的僞代碼在這一點上)什麼我試圖的:將參數傳遞到內聯函數

var something = 10; 

var something_else = 15; 

var dynamic_value = (function(something,something_else){ 
    if(something == something_else){ 
    return "x"; 
    }else{ 
    return "y"; 
    } 
})(); 

在這種情況下,「dynamic_value」應爲「Y」。問題是變量「something」和「something_else」從來沒有在這個內聯函數中看到。

如何將參數發送到內聯函數?

編輯:我使用jquery,雖然這可能不適用於這個問題。

回答

13

向他們發送調用函數時

var dynamic_value = (function(something, something_else) { 
    ... 
})(value_for_something, value_for_something_else); 
+0

Oooohhh,所以那些parens進入函數的parens。這樣可行。謝謝! – Ben

+1

調用這樣的函數就像調用任何其他函數一樣。語法看起來有點奇怪,但它確實沒有什麼不同。 –

5

你需要這樣稱呼它英寸

var dynamic_value = (function(something,something_else){ 
    if(something == something_else){ 
    return "x"; 
    }else{ 
    return "y"; 
    } 
})(something,something_else); 

這樣做的原因是,當你在函數參數定義相同的名稱,它們的參數僅僅是名稱,變量沒有得到插在那裏。最後一行是調用傳遞實際變量的函數。

此外,你剛剛創建了一個閉包。閉包有權訪問包含它的函數中聲明的所有變量。此代碼中另一個有趣的事實是,在包含函數級別定義的變量正被閉包函數中的變量遮蔽。原因很明顯:閉包中的變量名稱與包含函數中的變量名稱相同。

0

我在這裏猜測你想要dynamic_value只與something結合,但不是something_else

var base_value = 10; 

var something_else = 15; 

var dynamic_value = (function(base_value){ 
    return function (compare) { 
     if(base_value == compare){ 
      return "x"; 
     } else { 
      return "y"; 
     } 
    }; 
})(base_value); 

alert(dynamic_value(something_else)); // "y" 
alert(dynamic_value(10)); // "x"