2011-06-23 99 views
11

我知道在jQuery中,$(callback)jQuery(callback)相同,它與$(document).ready()具有相同的效果。

如何

jQuery(function($) { 

}); 

能有人給我解釋一下,這是什麼樣的功能呢?

它有什麼作用?

這個和$(callback)有什麼區別?

這個和$(function())有什麼區別?

回答

8
jQuery(function($) { 

}); 

是三個最安全的版本。它使得局部變量爲$,從而優雅地避免與可能使用符號的任何其他變量的衝突。

我認爲它也被加入最近,不記得以前見過它。

這些功能都做同樣的事情 - 執行一些代碼時,DOM已準備就緒。 $(document).ready(function(){})是原始的,它匹配底層javascript API。

「$」和「jQuery的」作爲一個參數被作爲快捷方式,以避免重複這樣的構建體共同創建了接受功能。接受一個接受$作爲第一個參數的函數是一個進一步的語法糖 - 現在,您可以方便地使用閉包,而無需自行完成。

+0

我喜歡你的回答(如果它是正確的),很清楚的解釋:) – Leem

2

所以我糾正了這一點,如果你讀了第一個評論,它給出了一些上下文。

jQuery(function() { 
    // Document Ready 
}); 


(function($) { 
    // Now with more closure! 
})(jQuery); 

我不是100%確定,但我認爲這只是將jQuery對象傳遞給閉包。我會在谷歌上進行一些挖掘,看看我是對還是錯,並會相應更新。

編輯:

我是非常正確的,但在這裏它是直接從他們的網站:

http://docs.jquery.com/Plugins/Authoring

「哪裏是我真棒美元符號,我知道,愛它仍然存在,但爲了確保您的插件不會與其他可能使用美元符號的庫衝突,最好將jQuery傳遞給一個將其映射到美元符號的自執行函數(閉包),以便它不能被在其執行範圍內被另一個圖書館覆蓋。「

+1

-1爲您第一線的簡寫。有一個很好的理由這樣做:如果你使用'$ .noConflict();'來恢復包含jQuery之前的'$',你可以在你的函數中使用'$'(ready ready回調接收jQuery對象作爲第一個參數),而不是將所有內容都包含在另一個匿名函數中。 – ThiefMaster

+0

你會在文檔中做到這一點嗎?很公平,我會同時更新這篇文章和我自己的常識。感謝您的澄清。 – Seth

+1

取決於 - 如果你想寫的只是一個document.ready函數,這是有道理的。如果在document.ready函數之前/之後有任何其他代碼使用jQuery,我肯定會使用'(function($){...})(jQuery);'方法 – ThiefMaster

0

首先,jQuery()是不一樣的$(document).ready()

$()jQuery()

和快捷...

$(function(){ ...});$(document).ready(function(){ ... });

因此快捷方式:

jQuery(function(){ ... }) 

將起作用一樣

$(document).ready(function({ ... }); 

但是...

jQuery('#foo').css("background-color", "#f00"); 

不會起作用一樣

$(document).ready('#foo').css("background-color", "#f00"); 

所以...

jQuery()一樣$(document).ready()

+2

嗯......我很確定這是如果你通過一個函數裏面? –

+0

是的,如果一個函數被傳遞,使用匿名函數快捷方式,二者將執行相同的操作。但是說'jQuery()'和$(document).ready()'是一樣的錯誤陳述。 – Mutt

11
  • $(function())是語法錯誤。
  • $()創建一個空的jQuery對象。
  • $(document).ready(function() { ... })當DOM準備
  • $(function() { ... })是同一事物的快捷方式
  • jQuery(function($) { ... })這樣做,太,但它也使內部功能$可不管它的外面設置爲執行給定的功能。
1

當你調用主jQuery的工廠函數(無論是作爲jQuery(<something>)或常用快捷$(<something>))它決定基於對<something>類型什麼。

如果你傳遞一個字符串作爲<something>它假定是選擇規範,將返回選擇匹配元素的jQuery的列表。

如果你傳遞一個jQuery對象(代表元素的列表,即從以前的調用返回的jQuery對象),它只會返回一個對象(本質上這是一種非手術)。

如果您傳遞一個DOM元素,它將返回一個包含該元素的jQuery列表(這樣您就可以將jQuery方法應用到該元素)。這就是$(document).ready()的情況 - 您將工廠函數傳遞給DOM元素「document」,它返回一個代表該元素的jQuery對象,並且使用該對象的ready()方法將事件處理函數添加到所有ready事件中列表中的DOM元素(在這種情況下,只有一個,即document)。

如果你傳遞一個函數,這僅僅是「跑這當一切準備就緒,你這樣做」,所以$(function() { ... });相當於$(document).ready(function() { ... });

相關問題