全局变量有什么不好的?

时间:2011-04-26 07:38:23

标签: javascript global-variables

  

可能重复:
  Why is it bad to make elements global variables in Javascript?

在JavaScript圣经中,据说全局变量(没有“var”关键字声明的变量)是一件非常糟糕的事情。好吧,与像Java或C ++这样的强类型语言相比,JavaScript就像一个街头帮派俚语(是!)。

但是有任何性能问题吗?或者是否导致浏览器崩溃?或者在使用全局变量时是否存在一些明显的差异?

我自己学习了JavaScript,并遵循书籍和专家的指导原则,但很高兴知道为什么这是一个如此重要的主题。

3 个答案:

答案 0 :(得分:5)

全局变量可能会产生意外的副作用(远距离行动)。

例如,当您打算使用局部变量i并忘记var和其他一些代码(之前运行过)时,那么启动您使用该变量的旧值。这可能会使你的代码疯狂,并且很难追踪(“ 值是如何在这里结束的?”)。

就在几天前there was a question about a similar problem(但在Java中)它导致很多混淆。

除此之外,它增加了变量的范围,这意味着即使您不再需要访问它也无法回收它的内存,这将导致内存泄漏。

答案 1 :(得分:2)

我想说这里有两个主要问题:

  • 起重
  • 重新定义外部变量

提升问题主要是在尝试在您可能认为不同的范围内定义相同的变量时出现,但实际上并非如此(例如,在if语句的括号内外)。

JavaScript推送所有变量定义,然后在最初声明和分配变量的位置分配值。这可能最终会出现一些奇怪的错误,你可能会在没有注意到的情况下重新定义自己的全局变量(可怕......)

另一个问题是,如果您在项目中使用外部库,则可以轻松覆盖已定义的变量,从而丢失一些提供的功能(您可能不想这样做)并引入微妙的错误(再次)。

我建议尽可能多地接受局部变量,或者你可以使用“名称空间”将它们分开。

最糟糕的是,对于这两个问题,JavaScript将保持沉默,因此很难找到错误。

答案 2 :(得分:1)

如果采用一种良好的结构化方法,全局变量是完全可以接受的,实际上可以节省一些开销,包括各种指针/变量的传递/复制。

对我来说,使用本地变量更多的是它使代码维护,调试和移植到其他系统的容易程度。