[英]Can someone explain what function($) does in jQuery
最近我正在讀別人的代碼,並且遇到了這個:
// Semicolon (;) to ensure closing of earlier scripting
// Encapsulation
// $ is assigned to jQuery
;(function($) {
// DOM Ready
$(function() {
...
});
})(jQuery);
我理解領先的觀點;,我理解$(function(){與文檔准備相同,但添加函數($)的重點是什么?
我知道它是一個閉包,但由於這個在全局范圍內被調用,所以看起來你不需要為此煩惱。 $(function(){將使用相同的全局對象,不是嗎?
它是為了防范某些事情,還是出於其他原因的最佳做法?
這是jQuery插件的常見結構。 它可以防止已被覆蓋的$
標識符用於其他內容。 在匿名函數中, $
總是引用jQuery。
例:
$ = "oh no";
$(function() { //Big problem!
//DOM ready
});
通過引入新范圍,您可以確保$
引用您期望的內容:
$ = "oh no";
(function($) { //New scope, $ is redeclared and jQuery is assigned to it
$(function() { //No problem!
//DOM ready
});
}(jQuery));
其背后的主要原因是許多其他JavaScript庫使用$
作為標識符(例如PrototypeJS)。 如果你想同時使用原型和jQuery,你需要讓原型有其$
標識符,但你可能不希望寫出來jQuery
你要調用一個jQuery方法每次。 通過引入新的范圍,你讓jQuery來有其$
在執行上下文回來。
您提供的代碼示例是自調用函數的示例:
(function(){
// some code…
})();
第一組括號定義了一個函數:(括在括號中的匿名函數)
(function() {})
這定義了匿名函數。 就其本身而言,它什么都不做。 但是如果在定義之后添加一組括號()
,它與用於調用函數的括號相同。 試試這個:
(function(message) {
alert(message);
})("Hello World");
這將創建一個接受參數的函數,並顯示一個包含所提供值的警告框。 然后,它立即使用參數“Hello World”調用該函數。
在您的示例中,定義了一個自調用函數。 它接受一個名為$
的參數。 然后,立即調用該函數,並引用jQuery
作為參數傳入。
如果您希望jQuery在noConflict()
模式下運行(這會刪除對$
的全局引用),這很常見。
在noConflict()
模式下,你仍然可以通過jQuery
全局變量訪問jQuery,但是大多數人寧願使用$
,所以這個自調用函數接受全局jQuery
變量作為函數范圍內名為$
的參數,您可以自由地使用自調用函數中的$
快捷方式,同時讓jQuery在noConflict()模式下運行,以避免與在全局范圍內使用$
其他庫發生沖突。
希望這能回答你的問題!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.