2009-11-09 90 views
1

我的應用程序中有大約2000行javascript代碼。很多是用戶交互/ jQuery。不要擔心,它一切工作正常:)需要關於處理大型javascript文件的建議

但它是越來越難以跟蹤的代碼庫。所以我把文件分成五個文件。

我認爲如果我加載所有文件,它們都駐留在內存中,並且可以相互通信。但它看起來不像它。因爲在文件A中,我有var currentPage = getURLvar('slpage');,在文件B中我有if (currentPage == 'someName')

但文件B無法識別變量currentPage。

此外,我有文件C中的一般腳本文件A和B可以使用。但我想這是不可能的?

任何意見是非常感謝。

UPDATE

我的JavaScript開始就像這樣:

// FILE A 
jQuery(document).ready(function() { 

    var currentPage = getURLvar('slpage'); 

    if ((currentPage == 'Aa') || (currentPage == 'Bb')) { 
    init_AA(); 
    } 
    else if ((currentPage == 'Cc') || (currentPage == 'Dd')) { 
    init_BB();  
    } else if ((currentPage == 'Ee') || (currentPage == 'Ff')) { 
    init_CC();  
    } 
    (...) 

// FILE B 
    function init_AA() 
    { 
    (...) 
    } 

    function getURLvar(name) 
    { 
    //Gets the URL and returns the value of specified paramter. 
    } 
+0

「currentPage」變量「活」在什麼範圍內? –

+1

如何在生產中將單個文件中的文件最小化? –

+0

@Jan - 您的範圍是什麼意思? @Alex - 我會在生產時做到這一點。但是,當我使用它時,當我爲該網站的不同部分使用不同的js文件時,它更易於管理。 – Steven

回答

4

你說得對,它可能訪問其他文件的腳本的一部分。你所遇到的問題聽起來像是其中一個範圍。

如果您的變量位於全局命名空間(這不是一個好主意),那麼您將可以像嘗試過那樣直接訪問它。另外,如果你的變量在一個方法中有作用域,那麼它只能被該方法訪問。

爲了暴露你想要的變量,我會爲代碼創建一個通用名稱空間,並將你的分離的Javascript作用於相關的命名空間。

這裏的一些資源,以獲取更多信息:

http://www.dustindiaz.com/namespace-your-javascript/

http://snook.ca/archives/javascript/javascript_name

UPDATE:

根據您已經發布,你可以簡單地移動變量decleration外的代碼匿名函數的範圍。

var currentPage; 

jQuery(document).ready(function() { 

currentPage = getURLvar('slpage'); 
... 
+0

humm ...我想知道是否有這樣的事情存在。儘管如此,我不確定你的意思。 – Steven

+1

範圍指定只是指代碼所具有的範圍。例如,在函數頂部聲明變量意味着該函數是該變量可以使用的範圍。在這個函數之外,變量不存在。我們把它稱爲具有範圍的變量(作用域爲函數)。真正被說的是「從哪裏可以看到這個變量」。在你的例子中,似乎變量只能看到我定義的函數。其他函數沒有這個範圍(看不到變量),因爲它被鎖定了。 –

+0

看到我上面的更新。這應該讓你立即開始運行。 –