我有兩個非常大的功能,a
和b
,它們目前在一個大的JavaScript文件中。我的目標是將每個函數放在單獨的JavaScript文件中。雞和蛋
的問題是,a
將調用b
,並b
將調用a
,所以,如果我把兩個功能在不同的文件,然後一會缺少其他的定義,我得到一個錯誤信息,事情破裂。
當它們在同一個文件中,在同一個閉包中,因爲吊起來的東西不會中斷。當每個引用另一個文件時,我怎樣才能在不同的文件中使用這兩個函數?
我有兩個非常大的功能,a
和b
,它們目前在一個大的JavaScript文件中。我的目標是將每個函數放在單獨的JavaScript文件中。雞和蛋
的問題是,a
將調用b
,並b
將調用a
,所以,如果我把兩個功能在不同的文件,然後一會缺少其他的定義,我得到一個錯誤信息,事情破裂。
當它們在同一個文件中,在同一個閉包中,因爲吊起來的東西不會中斷。當每個引用另一個文件時,我怎樣才能在不同的文件中使用這兩個函數?
如果他們將在不同的文件中,那麼你將不會有他們在相同的封閉,所以這是火災的問題。然後,如果你願意執行加載順序(即首先加載A,B),那麼只需要A定義一個B的存根,然後B在加載時重新定義它。只要A在B加載之前不執行,你應該沒問題。
使用Google Loader,那麼你知道腳本在函數調用之前是可用的。
我不會將它們分成單獨的文件,如果它們像這樣屬於一起的話。相反,嘗試自己分解功能。長文件沒有問題,但長功能通常是不可維護的。
除此之外:如果它們是單獨的函數,只要這兩個文件都被加載,並且在兩個文件都加載之前不調用函數,它們是否在同一文件中並不重要。
你不允許這樣的事情:
a.js:
function a() {}
b();
b.js:
function b() {}
a();
而是隻允許定義的功能。在包含a.js和b.js之後的第三個腳本中,您可以調用a()
或b()
。然後調用function a
的INSIDE可以調用function b
並反向。
這取決於*何時調用函數。如果它們只在對方內部調用,那麼將定義放在兩個單獨的文件中沒有問題。 –
我們可以問,爲什麼*你需要它們在相互依賴的獨立文件中? – Blazemonger
您的目標可能是將它們放在單獨的文件中,但現在最佳做法是儘量減少HTTP請求並將其組合成儘可能少的文件:http://developer.yahoo.com/performance/rules.html#num_http –