它不能是訂單問題和包裝問題。使用立即運行的函數包裝某些東西對訂單沒有影響,只在範圍內。
而如果titles
在另一個文件中定義,那麼作用域class Manager
的範圍並不重要。所以,這是一個訂單問題。如何定義titles
?
如果我要延遲運行任何代碼,直到整個頁面完全加載($(document.ready())之後,我可以確定所有javascript文件在任何代碼實際運行之前完全加載。
不太。$(document).ready()
(注意括號,沒有document.ready
功能......),直到所有頁面的HTML已加載延遲了一個函數的執行,這並不意味着所有的JavaScript已加載。這裏的好消息是:從JavaScript代碼的角度來看,其他JavaScript文件是否已經加載並不重要,因爲它們都是按順序運行的(注:我假設在這裏,你沒有做任何幻想就像從你的JavaScript代碼添加額外的<script>
標籤),所以只要你有
<script src="titles.js"></script>
<script src="Manager.js"></script>
你可以放心,Manager.js
後,才運行。 titles.js
有。
警告!依靠$(document).ready()
訂購JS代碼是一個常見的錯誤,可能會導致混淆!如果你的HTML看起來像這樣
<script src="Manager.js"></script>
<script src="titles.js"></script>
其中titles.js
創建了一個名爲全球和titles
Manager.js
看起來像這樣
$(document).ready ->
console.log titles
則輸出有時是titles
和有時是undefined
。爲什麼?因爲隨着the docs說,在DOM被初始化後
如果.ready()
被調用,新的處理程序傳遞將立即執行。
當第一個JS文件運行時,DOM可能已經被初始化! (實際上,如果瀏覽器將頁面的HTML緩存起來,這往往會發生。)
所以,保持簡單。只需按照正確的順序加載腳本。請記住,出於所有實際目的,您的腳本通過瀏覽器連接在一起,按順序放入單個JS文件中。
哇,謝謝特雷弗。很高興知道沒有魔法,只需要按照正確的順序加載腳本。我在查看DocumentCloud網站的源代碼作爲參考,看起來它們的core.jst文件(帶有全局JST對象)是要加載的最後一個文件。我對前面加載的類如何引用JST對象感到困惑,因爲我在自己的應用程序中發現了這樣的錯誤。 –