2011-06-02 54 views
4

以下函數定義有什麼區別?

1:

$(function() { 
    //stuff here 
}); 

2:

function($){ 
    //stuff here 
} 

回答

9

在#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... 
})(); 

...但由於某種原因,前面的例子更常見,即使有點不太清楚。 (我想這是一個短一些的字符。)

+0

親愛的@ T.J。 Crowder謝謝你的回答:但是#1&$(document.body).ready有什麼區別? – MoonLight 2011-06-02 08:48:14

+0

@LostLord:正如我所說,這只是一個快捷方式,詳情請參閱鏈接。 (但你的意思是'$(document).ready(handler)',而不是'$(document.body).ready(handler)'。) – 2011-06-02 08:49:48

+0

謝謝sir:哪個更好:$(document).ready(handler)或$(document.body)。準備(處理程序)獲取元素ID? – MoonLight 2011-06-02 09:17:55

3
  1. 此代碼調用函數$用匿名函數作爲第一個參數。通常當頁面被加載時(或者更好地說DOM已經準備就緒),它被用來做某些事情。是的,它會做一些事情,但只有當事件將被解僱。

  2. 此代碼只是一個參數爲$的匿名函數聲明。你通常可以在jQuery插件的代碼中找到這樣的函數。這種技術對本地$ variable有用。這將有助於提高性能,並有助於不污染全球範圍。

因此,第一個代碼片段將執行一些操作,第二個代碼將不會執行任何操作。

+0

感謝您的關注/但是我應該給他們打電話還是他們自己執行! /它們的執行時間有什麼區別? – MoonLight 2011-06-02 08:51:34

+0

@LostLord:正如我在我的回答中所說的,第一個會被jQuery調用(在DOM準備好的情況下),第二個如你的問題所示將不會被調用,除非你調用它。 – 2011-06-02 08:54:56