2012-09-18 64 views
2

當我細讀一個jQuery驅動的JavaScript源文件,我看到的功能定義,像這樣:的JavaScript/jQuery和「頂級」功能

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

$(function { 
    ... 
}); 

我明白了第一個:我承擔它的功能是在整個頁面被下載後觸發,是的?如果不是,請糾正我!

真正令我困惑的是第二個。這是一個匿名函數嗎?它如何/在哪裏被稱爲?什麼時候被調用(頁面加載)?

我想我是看慣了JavaScript函數編寫的方式:

function myFunction() { 
    ... 
} 

然後我打電話myFunction任何時候我需要它。這個「老」的方式如何與jQuery的構造進行比較?感謝您幫助我理解這些困惑!

+0

您應該閱讀[jQuery api](http://api.jquery.com/jquery/#jQuery3)。 – zzzzBov

+0

兩者在功能上是相同的。第二個是第一個的簡寫版本。 – Shmiddty

回答

5

第二個函數只是第一個方法的一個簡短方法。兩者都爲文檔的「就緒」事件註冊回調。

http://api.jquery.com/ready/

所有這三個如下語法是等價的:

$(文件)。就緒(處理)
$()準備就緒(處理器)(這是不推薦)
$(處理器)

編輯:
當DOM可以安全更新時,實際上會觸發ready事件。在外部資源(如圖像)完全加載之前,事件將會被提升,但大多數瀏覽器似乎都等待外部CSS在調用之前完成加載,因爲腳本通常依賴佈局計算來完成。簡寫方法jQuery方法非常常見,因爲它爲腳本提供了一種易於記憶和直接的方法,以便在腳本準備就緒時更改DOM。

+0

Thanks @jimp(+1) - 所以如果我編寫與jQuery無關的自定義函數,是否仍然使用「舊」的方式(非'$(function ...')? – IAmYourFaja

+0

函數jQuery的一切都與jQuery的:) –

+1

定義函數的舊方式仍然有效,但它不經常推薦,因爲它污染全局命名空間。建議將全局函數包裝在單個對象定義中(從而僅使用全局名稱空間中的一個條目),在匿名函數中定義它們,或使用var關鍵字在本地定義它們。但是你可以自由使用它們,仍然非常有效。 – jimp