2008-12-23 69 views

回答

21

它使用函數體來提供自己的作用域,而不是引入大量的可能被外部代碼意外改變的全局變量。

例如,

(function(){ 
    var someConstantValue = ...; 
    myCoolFunction = function(){ return someConstantValue * 5; } 
})(); 

myCoolFunction(); 

如果功能範圍並沒有出臺將有可能通過引入其他代碼(或另一個庫)

someConstantValue = someOtherValue; // this won't change the behaviour of myCoolFunction 
6

你說得對,這將防止全球污染意外改變someConstantValue命名空間。

jQuery所需的所有變量和函數都是在該函數內部創建的,這些函數和變量不會滲透到全局名稱空間中。如果你看一下這個代碼塊:

var jQuery = window.jQuery = window.$ = function(selector, context) { 
// The jQuery object is actually just the init constructor 'enhanced' 
return new jQuery.fn.init(selector, context); 
}; 

它實際上是通過設置window.jQuery和窗口連接jQuery的初始化向外界$的初始化函數。這是包裝函數內部的變量直接在包裝外部可用的唯一地方。

還要注意整個函數是這樣包裝的(函數,,,)(),只要文件加載就會執行該函數。

相關問題