Javascript 为什么不应该在NodeJS中使用太多全局变量?

Javascript 为什么不应该在NodeJS中使用太多全局变量?,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,项目中的所有文件都可以访问全局变量,这对开发人员来说通常是有利的,因为您只定义一次,不需要从其他文件导出,但我听说如果我在NodeJ中使用太多全局变量,可能会出现一些问题。 此外,我想使用我的mongoose模型作为全局变量,因为我大多数时候几乎在每个项目文件中都使用它们,这是真的吗?您可以使用全局变量,但更安全的是,您可以将应用程序的所有变量放在全局命名空间下,而不是创建许多可能已被项目中的其他库使用的单个变量。 定义包含变量的全局名称空间的更安全的方法是: var MY_APP_NAMESP

项目中的所有文件都可以访问全局变量,这对开发人员来说通常是有利的,因为您只定义一次,不需要从其他文件导出,但我听说如果我在NodeJ中使用太多全局变量,可能会出现一些问题。
此外,我想使用我的mongoose模型作为全局变量,因为我大多数时候几乎在每个项目文件中都使用它们,这是真的吗?

您可以使用全局变量,但更安全的是,您可以将应用程序的所有变量放在全局命名空间下,而不是创建许多可能已被项目中的其他库使用的单个变量。 定义包含变量的全局名称空间的更安全的方法是:

var MY_APP_NAMESPACE = {
  app_name: 'My App',
  app_version: '0.0.1'
};
然后,可以使用以下语法获取全局变量:

function myFunction() {
  var version = MY_APP_NAMESPACE.app_version;
}

这是一个由来已久的问题。您不使用全局名称空间是因为存在冲突的危险-其他人(如果您正在处理GIT项目)可能会用相同的名称声明相同的全局名称,然后出现问题


此外,全局变量使调试变得困难。例如,如果变量包含错误的值,那么在代码库中的何处设置该值?对于大型项目来说并不总是显而易见。

从我的观点来看,坚持导入/导出模块是一种更好的方法,因为它迫使您牢记体系结构。太多的全局变量容易导致错误和缺少测试。那么,内存使用是否有问题?我不这么认为。GLOBAL的一个很好的用途是常量(环境数据),最终用于应用程序中任何地方使用的库(例如:lodash)。如果您认为需要在全局名称空间中放置其他内容,那么这将是缺乏关注点分离的线索。此外,它还可能导致多个组件之间的冲突。