JS将范围分开以合并具有相同名称的多个变量

时间:2013-08-19 06:04:04

标签: javascript scope

有多个js文件,现在我必须将它们组合成一个大文件。

但是,由于这些文件在功能上很熟悉,因此它们具有许多具有相同名称的变量。所以我想知道是否有任何像命名空间或作用域的机制可以在文件中包含多个具有相同名称的变量。

修改

还有一个问题:

如何通过Chrome控制台访问“ad-hoc”功能中的变量?

通常我可以在Chrome控制台中执行此操作:

[js]
var car = "Model T";

[Chrome Console]
>> car
<< "Model T"
>> car = "Model S";
>> car
<< "Model S"

但是现在,如何在不同的范围内访问变量?

[js]
//lib1
(function(){
var car = "Model T";
})();
//lib2
(function(){
var car = "Model S";
})();

我认为在@ user2695276的解决方案中,答案是微不足道的。所以我的问题是ad-hoc功能。

2 个答案:

答案 0 :(得分:3)

立即调用函数表达式

      //library 1

      (function(){

           //wrap your code within this self executing function

        var x = 'some thing';

      })();


      //library 2

      (function(){

           //wrap your code within this self executing function

        var x = 'another thing';

      })();

变量将按预期工作,不会发生冲突。

答案 1 :(得分:2)

JS中的变量如果声明中没有'var',则默认为全局,并且位于全局命名空间中。这可能会造成命名冲突,尤其是当多人编写代码时(似乎是您的情况)。

名字空间: 您可以使用一个大的全局变量作为应用程序的最顶层命名空间。例如:

App = {
App.views = {} //encapsulates all view objects
App.views.view1 = {} // so on
}

这个单个变量首先保持较少的全局变量(在这种情况下技术上是一个)。所有应用程序的数据都安全地包装,最重要的是,为开发人员建立了一个通用模式。每个人都知道在哪里寻找说,一个'集合'以及在哪里创建一个新集合。

这个命名空间对大型项目有很大帮助。希望你能适应你的情况。

编辑:作为事后的想法,它可能需要改变架构。不确定你受到多少时间限制。但从长远来看,这样的东西可以让维护变得容易。

编辑:对于您的其他问题,在Chrome控制台中查看局部变量的唯一方法是将它们放在范围内。寻找“chrome dev工具中的断点调试”。一个直接的替代方法是在您想要控制的行上方编写“调试器”,以便在运行时暂停它。从那里你可以检查变量的运行时值(将鼠标悬停在控制台上或像往常一样在控制台中打印)。请记得在调试完成后删除“调试器”:)