posts - 82, comments - 269, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          JS中可以先使用函數,然后再定義.

          Posted on 2007-10-29 19:13 itspy 閱讀(2443) 評論(8)  編輯  收藏

            首先要說明的,下面這種方式是對的,雖然不知道為什么,很奇怪為什么可以先使用,再定義,希望有了解的人可以給個說法.
              <SCRIPT LANGUAGE="JavaScript">
              hello('www.openj.cn');

                function hello(name){alert("hello " +name)};   

              </SCRIPT>

          本文首發于 http://blog.openj.cn

          下面的這種定義函數方式,對于寫一些比較復雜的代碼比較合適,特別是有返回值時,函數名可以直接被賦予返回值,有時這會帶來很大的方便.
              <SCRIPT LANGUAGE="JavaScript">
               var hello = function(name){alert("hello "+name)};
                hello('www.openj.cn');

              </SCRIPT>

          下面這種方式是錯的,在此處不能先使用后定義,可能是因為函數名此時也當做變量名吧.對變量無法實現先使用后定義.這只是猜測,希望有明白人能給一個權威說話.
            <SCRIPT LANGUAGE="JavaScript">

            hello('www.openj.cn');
               var hello = function(name){alert("hello "+name)};

              </SCRIPT>


          評論

          # re: JS中可以先使用函數,然后再定義.  回復  更多評論   

          2007-10-29 22:08 by aisdf
          很簡單...解析的時候JS是先讀函數和定義,再調用的....

          # re: JS中可以先使用函數,然后再定義.[未登錄]  回復  更多評論   

          2007-10-29 23:08 by GoKu
          很多語言可以這樣...有什么奇怪

          # re: JS中可以先使用函數,然后再定義.  回復  更多評論   

          2007-10-30 08:44 by itspy
          @aisdf
          <SCRIPT LANGUAGE="JavaScript">

          hello('www.openj.cn');
          var hello = function(name){alert("hello "+name)};

          </SCRIPT>

          這種方式為什么不行?

          很簡單...解析的時候JS是先讀函數和定義,再調用的....
          這種說話有官方依據嗎?

          # re: JS中可以先使用函數,然后再定義.  回復  更多評論   

          2007-10-30 10:08 by genjuro
          使用function operator可以定義一個Function對象
          function hello(name){alert("hello " +name)};
          這種方式定義了一個名為hello的Function對象
          function(name){alert("hello "+name)};
          這種方式定義的是一個匿名的Function對象,如果不先賦值給一個變量是無法使用的

          # re: JS中可以先使用函數,然后再定義.  回復  更多評論   

          2007-10-30 23:11 by aisdf
          第一個里面定義hello是函數....

          后面一個可以認為hello為一個變量

          先讀函數,再變量和調用

          # re: JS中可以先使用函數,然后再定義.  回復  更多評論   

          2007-10-31 11:09 by itspy
          做完這個實驗,我也能猜測到這些結果,但我希望有人能有一個官方的說法,而不是推論與猜測

          最好是一個官方的鏈接什么的.....

          # re: JS中可以先使用函數,然后再定義.  回復  更多評論   

          2007-10-31 16:00 by wushy
          javascript執行時,先預編譯,再解釋執行.
          預編譯過程:
          首先為執行環境建立建立一個全局對象,一般客戶端腳本為window或global對象。
            然后,檢查某環境中根代碼塊中(非函數或{}中)var關鍵字,把這些變量設置成global對象的屬性,并附初值undefined.
          如果過程中遇到直接定義的函數(fun1的定義),那么把fun1設置成global對象的屬性,并附初值函數的定義.
          接下來才是解釋執行過程,也就是頁面上的js的順序執行過程.

          var hello = function(){...},在解釋執行過程才會把函數指針賦值給hello,在它之前hello是undefined.
          而function hello(){...}定義的之所以可以,因為它是在預編譯過程中,已經定義了hello這個變量.

          # re: JS中可以先使用函數,然后再定義.  回復  更多評論   

          2007-11-02 15:58 by itspy
          謝謝樓上的.

          拋了個磚頭終于引了個玉來了.

          http://www.aygfsteel.com/zkjbeyond/archive/2006/04/06/39514.html

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 高邑县| 兰考县| 本溪| 合阳县| 崇明县| 上虞市| 富锦市| 井陉县| 长武县| 西乡县| 资源县| 绥中县| 宣威市| 新蔡县| 嘉义市| 临朐县| 阿拉善左旗| 陵水| 南平市| 观塘区| 武宁县| 吴堡县| 霸州市| 桃源县| 邢台县| 长泰县| 五华县| 嘉禾县| 乐山市| 上林县| 元谋县| 邻水| 安顺市| 马尔康县| 资源县| 南川市| 枣阳市| 磴口县| 盐池县| 莱芜市| 化隆|