2011-08-06 20 views
6

難道這些都同樣的事情,即說文件準備的方式:在jQuery中說文檔準備的不同方式?

$(function() { 
    // 
}); 

$(function($) { 
    // 
})(jQuery); 

還是有兩者之間的區別,如果這樣的話時,我應該使用哪一個?

+2

最後一個是使用各種JS庫一起工作時, 。 –

+0

你可能想看到http://stackoverflow.com/questions/1388043/different-forms-of-document-ready – coreyward

+0

@Briedis如果使用插件中的2nd,可以最大限度地減少與其他庫衝突的機率? – Sergio

回答

9

第一個是.ready()的快捷方式。

第二個簡單無效,因爲你試圖調用一個不可調用的對象。

你大概意思是:

// v--------no $ at the beginning 
    (function($) { 

     // simply a new lexical environment with a 
     //  local $ parameter pointing to jQuery 

    })(jQuery); 

...雖然它無關,與DOM準備。

有你的第一個例子中的變化,結合了兩個:

jQuery(function($) { 

    // DOM ready, and creates a local $ parameter pointing to jQuery 

}); 
1

他們都是不一樣的。

第一個代碼塊用於執行文檔準備就緒的功能,當我們想要立即執行代碼塊而不需要等待代碼的其餘部分加載時使用第二個代碼塊。但是你的代碼的第二部分存在一些錯誤。它應該如下。

(function($) { 
    // 
})(jQuery); 
0

這一個是不正確的:

$(function($) { 
    // 
})(jQuery); 

你傳遞一個函數來$(...),然後調用結果。但是,$(...)的結果是一個jQuery對象,它不是一個函數。你可能會更好地看到它是這樣的:

$(

    function($) { 
     // 
    } 

) 

(jQuery); 

一般來說,有三種版本的document.ready,這些都是彼此相等:

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

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

$().ready(function() {...}); 
+0

'$()'在最近版本的jQuery(> = 1.4,IIRC)中不起作用,因爲這些版本將它視爲空選擇,而不是選擇文檔元素。這是最好的避免。 – lonesomeday

+1

@lonesomeday:你可能是正確的,因爲它最好被避免(因爲它沒有官方的支持),但它的確行得通,因爲jQuery的'.ready()'函數當前忽略了你傳遞給它的'document'。 '$ .fn.ready(...'和'$('MooTools')。ready(func ...'也可以工作,但是不再支持。 – user113716

+0

@patrick dw:我不確定他們是不是受支持的'因爲即使文檔說他們可以使用(與'不推薦',雖然增加) – pimvdb