【问题标题】:What is so bad about global variables? [duplicate]全局变量有什么不好? [复制]
【发布时间】:2011-04-26 07:38:22
【问题描述】:
【问题讨论】:
标签:
javascript
global-variables
【解决方案1】:
全局变量可能会产生意想不到的副作用(远距离操作)。
例如,当您打算使用局部变量 i 并忘记了 var 和其他一些代码(之前运行的)做了同样的事情时,那么您开始使用它变量旧值。这可能会使您的代码疯狂偏离其轨道,并且很难追踪(“那个值是如何在这里结束的?”)。
就在几天前there was a question about a similar problem(然而,在 Java 中)它导致了很多混乱。
除此之外,它增加了变量的范围,这意味着即使您不再需要访问它,它的内存也无法回收,这将导致内存泄漏。
【解决方案2】:
如果采用良好的结构化方法,全局变量是完全可以使用的,并且实际上节省了所有传递/复制各种指针/变量的开销。
对我来说,使用本地变量更重要的是它使代码易于维护、调试和移植到其他系统。
【解决方案3】:
我想说这里有两个主要问题:
提升问题主要出现在尝试在您可能认为不同的范围内定义相同的变量时,但实际上并非如此(例如,在 if 语句的大括号内部和外部)。
JavaScript 将所有变量定义向上推,然后在最初声明和分配变量的任何地方分配值。这可能会导致一些奇怪的错误,您可能会在没有注意到的情况下重新定义自己的全局变量(可怕...)
另一个问题是,如果您在项目中使用外部库,您可以轻松地覆盖已定义的变量,从而失去一些提供的功能(您可能不想这样做)并引入细微的错误(再次)。
我会建议尽可能地包含局部变量,或者您可以使用“命名空间”来分隔它们。
最糟糕的是,对于这两个问题,JavaScript 将保持沉默,因此很难找到错误。