2011-12-01 54 views
0

我已將所有的JavaScript調用放在jQuery.ready()之內,以確保在訪問DOM之前完全加載DOM。但是對於函數定義(我自己寫的那些函數定義),放置它們的最佳做法是什麼(在它們的相應調用之前)。在<body>開頭?或者在<body>的末尾?或者在jQuery.ready()裏面?或者它根本無關緊要?謝謝。在文檔中放置javascript函數定義的位置?

+1

_「在它們相應的調用之前」 - 實際上,在相同的腳本元素或相同的函數範圍內,您的函數聲明不必在被調用之前進行,因爲函數聲明是「懸掛的」,即JS解釋器將它們當作是在塊的開始處聲明的。 – nnnnnn

+0

@nnnnnn - 這是一個有用的信息。作爲js的新手,我非常欣賞這樣的知識。謝謝! – tamakisquare

回答

0

不要在ready()函數中放置函數。

你應該在ready調用之上聲明它們,理想情況下,所有的js都在html的底部處理。

+0

謝謝。如果它只是函數**定義**,將它們放置在html的頂部或底部會產生什麼差異? – tamakisquare

+1

腳本元素按文檔順序處理。如果函數聲明在一個腳本元素中,並且調用它們的代碼在另一個腳本元素中,那麼聲明必須在調用函數時加載。 – RobG

+1

@開清 - 爲什麼不在document.ready處理函數中聲明函數?如果它們僅由對方調用,並且其他事件處理程序也在document.ready中設置,那麼這將非常適合將所有內容都保留在全局範圍之外的優勢。當然,任何需要在document.ready處理程序之外的代碼調用的函數也需要在外部聲明。也許你有一個很好的理由說不要這樣做,但除非你解釋它是什麼,否則我們怎麼能知道它... – nnnnnn

0

如果您將JavaScript放置在正文或正文的頂部,那麼您將需要使用jQuery準備好IF它們依賴於DOM的某些部分。作爲一種快捷方式,你可以通過你的代碼$,像這樣:

$(function(){ 

    $("#domID").method(); 
}); 

然而,你可以把你的腳本在底部放棄整個的混亂。瀏覽器從頂部到底部讀取您的HTML。如果訪問domID的腳本出現在ID爲domID的DOM元素下面,那麼它將正常工作。所以上面的代碼片斷可通過以下方式進一步簡化:

$("domID").method(); 

作爲一個說明,這並非總是如此。我注意到你不能立即訪問畫布元素。使用$$.ready可能會更安全,然後在您更熟悉DOM和JavaScript的加載方式時將其刪除。

相關問題