2011-10-13 100 views
1

我有兩個非常大的功能,ab,它們目前在一個大的JavaScript文件中。我的目標是將每個函數放在單獨的JavaScript文件中。雞和蛋

的問題是,a將調用b,並b將調用a,所以,如果我把兩個功能在不同的文件,然後一會缺少其他的定義,我得到一個錯誤信息,事情破裂。

當它們在同一個文件中,在同一個閉包中,因爲吊起來的東西不會中斷。當每個引用另一個文件時,我怎樣才能在不同的文件中使用這兩個函數?

+1

這取決於*何時調用函數。如果它們只在對方內部調用,那麼將定義放在兩個單獨的文件中沒有問題。 –

+3

我們可以問,爲什麼*你需要它們在相互依賴的獨立文件中? – Blazemonger

+4

您的目標可能是將它們放在單獨的文件中,但現在最佳做法是儘量減少HTTP請求並將其組合成儘可能少的文件:http://developer.yahoo.com/performance/rules.html#num_http –

回答

4

如果他們將在不同的文件中,那麼你將不會有他們在相同的封閉,所以這是火災的問題。然後,如果你願意執行加載順序(即首先加載A,B),那麼只需要A定義一個B的存根,然後B在加載時重新定義它。只要A在B加載之前不執行,你應該沒問題。

1

使用Google Loader,那麼你知道腳本在函數調用之前是可用的。

1

我不會將它們分成單獨的文件,如果它們像這樣屬於一起的話。相反,嘗試自己分解功能。長文件沒有問題,但長功能通常是不可維護的。

除此之外:如果它們是單獨的函數,只要這兩個文件都被加載,並且在兩個文件都加載之前不調用函數,它們是否在同一文件中並不重要。

0

你不允許這樣的事情:

a.js:

function a() {} 
b(); 

b.js:

function b() {} 
a(); 

而是隻允許定義的功能。在包含a.js和b.js之後的第三個腳本中,您可以調用a()b()。然後調用function a的INSIDE可以調用function b並反向。