以下函數定義有什麼區別?
1:
$(function() {
//stuff here
});
2:
function($){
//stuff here
}
以下函數定義有什麼區別?
1:
$(function() {
//stuff here
});
2:
function($){
//stuff here
}
在#1中,當DOM準備就緒時,你的函數將被jQuery調用;將函數傳遞到$()
是$(document).ready(function() { ... });
(details here)的快捷方式。
在#2中,您正在定義一個函數,但既不會調用它,也不會要求jQuery調用它。 (事實上,如圖所示,這是一個語法錯誤 —你需要將它分配給某個東西或稱它爲無效名稱是有效的。)你引用的任何東西都不會執行這個函數,你你必須自己調用它。
在#2,你可能已經看到了那裏的成語是:
(function($) {
// ...code using `$` for jQuery here...
})(jQuery);
,當你想代碼立即運行(不等待DOM就緒)是你會做相當標準的事情,您希望在函數中使用$
來引用jQuery,但您希望與noConflict
模式兼容。你在插件中看到了很多。它定義了一個函數接受自變量,其中全局定義了shadows任何$
,然後立即調用通過jQuery
傳遞的函數作爲參數。因此,即使$
沒有映射到jQuery
全局,它在該功能。你可以做同樣的事情,像這樣:
(function() {
var $ = jQuery;
// ...code using `$` for jQuery here...
})();
...但由於某種原因,前面的例子更常見,即使有點不太清楚。 (我想這是一個短一些的字符。)
此代碼調用函數$用匿名函數作爲第一個參數。通常當頁面被加載時(或者更好地說DOM已經準備就緒),它被用來做某些事情。是的,它會做一些事情,但只有當事件將被解僱。
此代碼只是一個參數爲$的匿名函數聲明。你通常可以在jQuery插件的代碼中找到這樣的函數。這種技術對本地$ variable有用。這將有助於提高性能,並有助於不污染全球範圍。
因此,第一個代碼片段將執行一些操作,第二個代碼將不會執行任何操作。
感謝您的關注/但是我應該給他們打電話還是他們自己執行! /它們的執行時間有什麼區別? – MoonLight 2011-06-02 08:51:34
@LostLord:正如我在我的回答中所說的,第一個會被jQuery調用(在DOM準備好的情況下),第二個如你的問題所示將不會被調用,除非你調用它。 – 2011-06-02 08:54:56
親愛的@ T.J。 Crowder謝謝你的回答:但是#1&$(document.body).ready有什麼區別? – MoonLight 2011-06-02 08:48:14
@LostLord:正如我所說,這只是一個快捷方式,詳情請參閱鏈接。 (但你的意思是'$(document).ready(handler)',而不是'$(document.body).ready(handler)'。) – 2011-06-02 08:49:48
謝謝sir:哪個更好:$(document).ready(handler)或$(document.body)。準備(處理程序)獲取元素ID? – MoonLight 2011-06-02 09:17:55