簡體   English   中英

為什么jQuery將自己包裝在一個函數中?

[英]Why does jQuery wrap itself in a function?

我正在閱讀jQuery源代碼 ,我想知道為什么整個源文件都包含在一個自治函數中。

(function(){
  ...
})();

這有助於不污染全局命名空間嗎? 它為什么存在,它是如何工作的?

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

例如。

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

myCoolFunction();

如果未引入函數作用域,則可能會通過引入其他代碼(或其他庫)意外更改someConstantValue

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

你是對的,它可以防止污染全局命名空間。

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和window。$設置為初始化函數來將jQuery初始化程序連接到外部世界。 這是包裝函數內部變量直接在包裝器外部可用的唯一位置。

另請注意,整個函數都包含這樣(函數,,,)(),它將在文件加載后立即執行該函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM