2009-11-09 59 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

看到我上面的更新。这应该让你立即开始运行。 –