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

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

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

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

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

              </SCRIPT>

          本文首發(fā)于 http://blog.openj.cn

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

              </SCRIPT>

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

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

              </SCRIPT>


          評論

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

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

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

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

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

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

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

          </SCRIPT>

          這種方式為什么不行?

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

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

          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中可以先使用函數(shù),然后再定義.  回復(fù)  更多評論   

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

          后面一個可以認(rèn)為hello為一個變量

          先讀函數(shù),再變量和調(diào)用

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

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

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

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

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

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

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

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

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

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 米林县| 宁陕县| 孝感市| 闽清县| 北安市| 青河县| 广丰县| 南投市| 宜宾市| 航空| 禹城市| 和林格尔县| 隆回县| 巍山| 大同县| 罗山县| 临武县| 米脂县| 抚松县| 民县| 安溪县| 华蓥市| 东源县| 巫溪县| 蒲城县| 巍山| 甘孜县| 崇阳县| 青阳县| 收藏| 横山县| 江津市| 苏州市| 沙雅县| 雷波县| 临城县| 桃园县| 天台县| 隆安县| 康保县| 齐齐哈尔市|