[英]Why wrap JavaScript in this “(function($){ … JavaScript code ..})(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.