隨筆 - 42, 文章 - 1, 評論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          自調用匿名函數(shù) self-invoking anonymous function

          (function( window, undefined ) {

              // jquery code

          })(window);

          1.這是一個自調用匿名函數(shù)。什么東東呢?在第一個括號內,創(chuàng)建一個匿名函數(shù);第二個括號,立即執(zhí)行

          2.為什么要創(chuàng)建這樣一個“自調用匿名函數(shù)”呢?

          通過定義一個匿名函數(shù),創(chuàng)建了一個“私有”的命名空間,該命名空間的變量和方法,不會破壞全局的命名空間。這點非常有用也是一個JS框架必須支持的功能,jQuery被應用在成千上萬的JavaScript程序中,必須確保jQuery創(chuàng)建的變量不能和導入他的程序所使用的變量發(fā)生沖突。

          3.匿名函數(shù)從語法上叫函數(shù)直接量,JavaScript語法需要包圍匿名函數(shù)的括號,事實上自調用匿名函數(shù)有兩種寫法(注意標紅了的右括號):

          (function() {

              console.info( this );

              console.info( arguments );

           }( window ) 
          );

          (function() {

              console.info( this );

              console.info( arguments );

           }
          )( window );

          4.為什么要傳入window呢?

          通過傳入window變量,使得window由全局變量變?yōu)榫植孔兞浚斣趈Query代碼塊中訪問window時,不需要將作用域鏈回退到頂層作用域,這樣可以更快的訪問window;這還不是關鍵所在,更重要的是,將window作為參數(shù)傳入,可以在壓縮代碼時進行優(yōu)化,看看jquery-1.6.1.min.js:

           

          (function(a,b){})(window); // window 被優(yōu)化為 a   

          5.為什么要在在參數(shù)列表中增加undefined呢?

          在 自調用匿名函數(shù) 的作用域內,確保undefined是真的未定義。因為undefined能夠被重寫,賦予新的值。

            undefined = "now it's defined";

            alert( undefined );

          瀏覽器測試結果:

          瀏覽器

          測試結果

           結論

          ie

              now it's defined    

            可以改變

          firefox

          undefined

            不能改變

          chrome

          now it's defined

            可以改變

          opera

          now it's defined

            可以改變


           6. 注意到源碼最后的分號了嗎?

          分號是可選的,但省略分號并不是一個好的編程習慣;為了更好的兼容性和健壯性,請在每行代碼后加上分號并養(yǎng)成習慣。

           

           

          posted on 2012-02-22 10:41 段旭 閱讀(1144) 評論(0)  編輯  收藏 所屬分類: JQuery

          主站蜘蛛池模板: 西乌| 乐清市| 阳山县| 报价| 襄汾县| 灵川县| 浦城县| 荃湾区| 兴国县| 精河县| 鄂伦春自治旗| 佛山市| 元朗区| 西乡县| 杭州市| 梨树县| 沁水县| 安庆市| 准格尔旗| 铜川市| 边坝县| 八宿县| 常宁市| 平顶山市| 游戏| 清原| 义马市| 沽源县| 泸溪县| 红安县| 宜阳县| 大港区| 莆田市| 重庆市| 株洲市| 北海市| 安顺市| 舒兰市| 宜州市| 涟源市| 陆河县|