gpt4 book ai didi

javascript - 为什么我不应该在 JavaScript 中使用全局变量来表示常量?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:18:59 26 4
gpt4 key购买 nike

我听说 JavaScript 中的全局变量不好,我可以理解一些命名空间问题等。但是为什么我不应该将全局变量用于在整个脚本中永远不会改变的东西——比如日期? (当然,它每天都在变化,但只会在整个脚本中被引用而不会改变。)

最佳答案

如果全局变量在您认为唯一的命名空间中受到保护并且仅在有益时使用,则您可以使用全局变量。主要问题是全局变量会使一段代码更有可能与另一段代码发生冲突(如果不使用不同的 namespace 或非常独特的名称)。出于这个原因和其他原因,最好在实际上不需要全局变量时避免使用它们(当声明为某个范围的局部变量时同样有效),但仍然有一些适当的理由使用全局变量。教育的要点是,许多人在根本不需要时使用全局变量。如果您需要它们或发现它们更有效,那么只要保护 namespace 免受意外冲突,您就可以很好地使用它们。

我亲自创建了一个顶级全局对象,并将我所有其他全局对象卡在该对象上。

全局变量的一些其他问题:

  1. 它们在 Javascript 中的访问速度比本地变量慢,因为当解释器在可能存在的各种范围内查找给定变量名称时,它们是最后找到的。通常不是一个明显的问题,但需要注意.这是一个 jsperf这显示了差异有多大。
  2. 如果您有任何修改全局变量的异步代码或修改全局变量的定时器驱动代码,并且多个异步操作可以同时运行,则多个异步操作可以通过修改相同的全局变量。
  3. 全局变量通常不会在使用点附近声明,因此阅读代码可能更具挑战性。
  4. 全局变量通常不会在调试器中自动显示(局部变量的方式),这使得调试不太方便。
  5. IE 会根据 DOM 中的某些名称自动定义一堆全局变量,这些变量可能会在您没有意识到的情况下与您自己的全局变量发生冲突。
  6. 在局部变量上简单地省略关键字“var”即可使其成为全局变量,如果该名称已被用作预期的全局变量,则可能会混淆代码。我在 for (i = 0; i < m.length; i++) 上看到过这种情况构建之前。很难找出问题所在。
  7. 全局变量在脚本的生命周期内持续存在。如果使用全局变量来保存脚本生命周期中不需要存在的对象的对象引用,这可能会导致脚本使用比其他情况更多的内存。
  8. 浏览器中的全局变量存在于 window 的范围内对象,这样它们不仅可以与其他全局变量发生冲突,还可以与窗口对象上的任何其他内容发生冲突。

关于javascript - 为什么我不应该在 JavaScript 中使用全局变量来表示常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6989903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com