先基本代碼
(function(window,undefined){
var jQuery = ........
//.......
})();
window.jQuery = window.$ = jQuery;
})(window);
1、為什麼要建立自調用函數?
通過建立自調用匿名函數,建立一個特殊的函數作用域,該作用域中的代碼不會和已有的同名函數、方法和變量以及第三方庫沖突
2、自調用函數的幾種寫法
寫法1
(function(){
//.......
})();
寫法2
(function(){
//........
}());
寫法3
!function(){
//........
}();
3、為什麼要為自調用匿名函數設定參數window,并傳入window對象?
通過傳入window對象,可以使window對象變為局部變量(即把函數參數作為局部變量使用),這樣當在jQuery代碼塊中通路widow對象時,不需要将作用域鍊回退到頂層作用域,進而可以更快的通路window對象,這是原因之一;另外,将window對象作為參數傳入,可以在壓縮代碼時進行優化。
4、為什麼要為自調用匿名函數設定參數undefined?
特殊值undefined是window對象的一個屬性,例如,執行下面的代碼将會彈出true:
alert("undefined" in window); //true
通過把參數undefined作為局部變量使用,但是又不傳入任何值,可以縮短查找undefined時的作用域鍊。
另外,更重要的原因是,通過這種方式可以確定參數undefined的值是undefined,因為undefined有可能會被重寫為新的值。
5、自調用匿名函數最後的分号(;)
1、在下面的代碼中,如果自調用匿名函數的前一行末尾沒有加分号,則自調用匿名函數的第一對括号會被當作是函數調用
var n = 1
(function(){})()
2、在下面的代碼中,如果未在第一個自調用匿名函數的末尾加分号,則下一行自調用匿名函數的第一對括号會被當作是函數調用
( function(){} )()
( function(){} )()
( function(){} )()