Javascript匿名函数vs普通函数

时间:2011-05-11 17:16:36

标签: javascript jquery

有什么区别:

<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>

没有详细介绍我在这里想要实现的内容,有没有理由为什么匿名方法可以正常工作而对函数的调用却没有?它们不应该产生相同的结果吗?

3 个答案:

答案 0 :(得分:2)

要调用函数,您必须执行此操作:

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

或者:

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

答案 1 :(得分:2)

它们都有效,但你不能将函数绑定到像这样的事件

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

因为a函数必须绑定到click事件。将参数传递给函数时,它返回undefined,这不是函数。您可以通过更改第二个代码示例来解决此问题:

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

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

答案 2 :(得分:1)

第二个例子是错误的:

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

应该是:

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

但是因为你想传递InitialDictionary作为参数,你需要使用第一种方法,它将在匿名函数中捕获它。