我讀的是jQuery source,我想知道爲什麼整個源文件被封裝在一個自治的函數中。爲什麼jQuery將自己包裝在一個函數中?
(function(){
...
})();
這是否有助於不污染全局名稱空間?爲什麼它在那裏,它是如何工作的?
我讀的是jQuery source,我想知道爲什麼整個源文件被封裝在一個自治的函數中。爲什麼jQuery將自己包裝在一個函數中?
(function(){
...
})();
這是否有助於不污染全局名稱空間?爲什麼它在那裏,它是如何工作的?
它使用函數體來提供自己的作用域,而不是引入大量的可能被外部代碼意外改變的全局變量。
例如,
(function(){
var someConstantValue = ...;
myCoolFunction = function(){ return someConstantValue * 5; }
})();
myCoolFunction();
如果功能範圍並沒有出臺將有可能通過引入其他代碼(或另一個庫)
someConstantValue = someOtherValue; // this won't change the behaviour of myCoolFunction
你說得對,這將防止全球污染意外改變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的初始化向外界$的初始化函數。這是包裝函數內部的變量直接在包裝外部可用的唯一地方。
還要注意整個函數是這樣包裝的(函數,,,)(),只要文件加載就會執行該函數。