簡體   English   中英

有人可以解釋jQuery中的函數($)

[英]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.

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