2011-05-11 65 views
1

有什麼區別:沒有進入細節到什麼,我想在這裏實現的Javascript匿名函數與正常功能

<script type="text/javascript"> 
     $().ready(function() { 
      InitialDictionary = new Array(); 
      LoadCurrentValues(InitialDictionary); 
      $("a[id*=SomeLink]").click(function() { 
       if (!CompareDictionaries(InitialDictionary)) 
       { 
        alert('Hello') 
       } 
      } 
     ) 
     }) 
</script> 

<script type="text/javascript"> 
    $().ready(function() { 
     InitialDictionary = new Array(); 
     LoadCurrentValues(InitialDictionary); 
     $("a[id*=SomeLink]").click(CheckValuesChanged(InitialDictionary)); 
    }) 

    function CheckValuesChanged(InitialDictionary) { 
     if (!CompareDictionaries(InitialDictionary)) 
     { 
      alert('Hello') 
     } 
    } 
</script> 

,是沒有任何理由的匿名方法工作正常,並且對函數的調用不會?他們不應該產生相同的結果嗎?

回答

2

要叫你要做這樣的功能:

$("a[id*=LogoLink]").click(function(){CheckValuesChanged(InitialDictionary)}); 

或者:

$("a[id*=LogoLink]").click("CheckValuesChanged(InitialDictionary)"); //might work 
+0

**不,這個_won't_工作。**當調用'setTimeout'時,它可以工作(除了變量),但是它被大大地皺起了眉頭。 – SLaks

+0

@SLaks,因此* *可能*,最好與選項1 – Neal

+0

並且第一個解決方案仍然使用匿名函數。 OP似乎希望不使用匿名功能。 –

1

第二個例子是錯誤的:

$("a[id*=LogoLink]").click(CheckValuesChanged(InitialDictionary)); 

它應該是:

$("a[id*=LogoLink]").click(CheckValuesChanged); 

但是,因爲你想通過InitialDictionary作爲參數,你需要使用第一種方法,將捕捉到它的匿名功能。

+0

若在OP想要一個參數 – Neal

+0

@Neal,葉氏,在編... –

+0

我不能將參數傳遞到函數?因爲我想在幾次.click(...)調用中重用該方法。 – Dante

2

他們都工作,但你不能在功能綁定到一個事件這樣

$("a[id*=LogoLink]").click(CheckValuesChanged(InitialDictionary)); 

因爲一個函數必須綁定到click事件。當你傳遞一個參數給函數時,它返回undefined,這不是一個函數。你可以通過改變你的第二個代碼示例像這樣解決這個問題:

$().ready(function() { 
    InitialDictionary = new Array(); 
    LoadCurrentValues(InitialDictionary); 
    $("a[id*=LogoLink]").click(CheckValuesChanged); 

    function CheckValuesChanged() { 
     if (!CompareDictionaries(InitialDictionary)) { 
       alert('Hello') 
     } 
    } 
}); 
+0

'InitialDictionary'是** **不是在範圍'CheckValuesChanged' – Neal

+0

@Neal固定,現在是。 –

+0

並不總是最好使用這樣的變量,而不是變量是全局變量時函數中的點是什麼? – Neal