你函数没有返回值吧。加了()就是执行这个匿名函数了,而不是将匿名函数复制给initPage变量而且要注意变量的作用域

解决方案 »

  1.   


     var initPage = function () {
                   alert("11");
                };
    $(function(){
    $("#btnRefreash").click(function () {
                    initPage();
                });
    });
    感觉该这么写呢。。
      

  2.   


    返回值是函数体的东西啊,
    var initPage = function () {
                   //methodBody
                };
    这个是把整个函数的引用赋值给initPage ,
    加个() , 就变成了将函数返回值赋值给initPage ?
    感觉好诡异...作用域应该没问题吧,都在一个作用域内.
      

  3.   


    var initPage = function () {
                   //methodBody
                }();加上了(),function部分已经执行了,除非function返回的是另一个函数,即initPage是一个函数,才能initPage()执行。
    你methodBody的代码是怎么样的?
      

  4.   


    逻辑都变了啊!
    我原来是初始一次 , btnRefreash按了也执行一次
    除非再加个 initPage(); 调用,这当然就没问题了...
      

  5.   

       //methodBody 不返回如何东西.
    代码运行情况我已经知道了,
    不加() 就是定义一个匿名函数,然后赋值给initpage这个变量,
    加了后就是执行匿名函数,并将函数返回的结果(void)赋值给initpage这个变量,所以是undefined
     就是不太理解为什么这样.
    感觉这个语法糖已经破坏了语法的统一性了.
      

  6.   


    你可以这样理解:
    js中的函数其实是一种数据,与数值,数组和字符串是一样的。一个函数后面的()实际上是执行函数的运算符,和+-*/没有多少区别。
    这两个好理解吧
    1)var a = 123;
    var r = a * 2;2)var a = function () { alert(123); };
    var r = a();
    那么1)可以改成var r = 123 * 2;同样的2)也可以改成var r = function () { alert(123); }();
      

  7.   

    ls的答案很好,这下子理解了,感谢...看来还是对函数式编程这个思维模式不够熟悉.js的函数所代表的概念 比java c#之类的丰富得多
      

  8.   

    嗯 其实还是可以类比委托,
    只是js是弱类型,所以initpage既能用函数赋值,又能用函数的返回值赋值,
    但两者是不同的行为.