Javascript JS separate scope将多个变量合并为同名变量

Javascript JS separate scope将多个变量合并为同名变量,javascript,scope,Javascript,Scope,有多个js文件,现在我必须将它们合并成一个大文件 但是,由于这些文件在函数中很熟悉,因此它们有许多同名变量。所以我想知道是否有任何机制,比如名称空间或作用域,可以在一个文件中输入多个同名变量 编辑 及补充问题: 如何通过Chrome控制台访问“特殊”功能中的变量 通常我可以在Chrome控制台中执行此操作: [js] var car = "Model T"; [Chrome Console] >> car << "Model T" >> car = "Mod

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

但是,由于这些文件在函数中很熟悉,因此它们有许多同名变量。所以我想知道是否有任何机制,比如名称空间或作用域,可以在一个文件中输入多个同名变量

编辑 及补充问题:

如何通过Chrome控制台访问“特殊”功能中的变量

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

[js]
var car = "Model T";

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

我认为在@user2695276的解决方案中,答案是微不足道的。因此,我的问题是临时函数。

立即调用函数表达式

      //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';

      })();

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

立即调用的函数表达式

      //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';

      })();

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

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

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

App = {
App.views = {} //encapsulates all view objects
App.views.view1 = {} // so on
}
这个单一变量首先保留较少的全局变量(在本例中技术上是一个)。所有应用程序的数据都是安全包装的,最重要的是,为开发人员建立了一个通用模式。每个人都知道在哪里寻找,比如说,一个“收藏”,以及在哪里制作一个新的

这种名称空间在大型项目中帮助很大。希望您能根据自己的情况进行调整

编辑:事后考虑,可能需要对体系结构进行更改。不知道你有多少时间限制。但从长远来看,这样的东西使维护变得容易


编辑:对于您的其他问题,在chrome控制台中查看局部变量的唯一方法是将它们引入范围。查找“chrome开发工具中的断点调试”。一种直接的替代方法是在您希望控件在运行时暂停的行上方写入“调试器”。从这里,您可以检查变量的运行时值(像平时一样在控制台中悬停鼠标或打印)。请记住在调试完成后删除“debugger:)

JS中的变量如果在声明中没有前面加上“var”,则为默认全局变量,并位于全局命名空间中。这可能会造成命名冲突,特别是当多人编写代码时(似乎是您的情况)

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

App = {
App.views = {} //encapsulates all view objects
App.views.view1 = {} // so on
}
这个单一变量首先保留较少的全局变量(在本例中技术上是一个)。所有应用程序的数据都是安全包装的,最重要的是,为开发人员建立了一个通用模式。每个人都知道在哪里寻找,比如说,一个“收藏”,以及在哪里制作一个新的

这种名称空间在大型项目中帮助很大。希望您能根据自己的情况进行调整

编辑:事后考虑,可能需要对体系结构进行更改。不知道你有多少时间限制。但从长远来看,这样的东西使维护变得容易


编辑:对于您的其他问题,在chrome控制台中查看局部变量的唯一方法是将它们引入范围。查找“chrome开发工具中的断点调试”。一种直接的替代方法是在您希望控件在运行时暂停的行上方写入“调试器”。从这里,您可以检查变量的运行时值(像平时一样在控制台中悬停鼠标或打印)。请记住在调试完成后删除“debugger:)

为什么需要这样做?这背后的原因是什么?你为什么要这样做?这背后的原因是什么?我认为这是一个优雅的答案,因为我在许多库中看到了这些东西,但没有意识到它的功能。顺便说一句,我如何使用chrome控制台访问ad-hoc函数中的变量?我不确定你在问什么,但如果是关于将变量记录到控制台,你可以像平时那样做。如果需要记录库内容的更多信息,可以手动将这些信息附加到诸如console.log('lib 1 var x value'+x)之类的日志消息中。这就是你想要的吗?我认为这是一个优雅的答案,因为我在许多库中看到了这些东西,但没有实现其功能。顺便说一句,我如何使用chrome控制台访问ad-hoc函数中的变量?我不确定你问的是什么,但如果是关于将变量记录到控制台,你可以像平时那样做。如果需要记录库内容的更多信息,可以手动将这些信息附加到诸如console.log('lib 1 var x value'+x)之类的日志消息中。这就是你想要的吗?其中一个问题是我必须在每个变量名的前面添加“APP”。是的。并非每个变量都是如此。不要逐字逐句地对待它。归根结底,这些都是模式。帮助我们的良好做法。您可能不会保留每个全局变量。但是相关的。比如模型、集合、视图、助手函数等等。其中一个问题是我必须在每个变量名的前面添加“APP”。是的。并非每个变量都是如此。不要逐字逐句地对待它。归根结底,这些都是模式。帮助我们的良好做法。您可能不会保留每个全局变量。但是相关的。例如模型、集合、视图、辅助函数等。