【问题标题】:How to cleanly deal with global variables?如何干净地处理全局变量?
【发布时间】:2011-02-21 08:47:50
【问题描述】:

我有许多 aspx 页面 (50+)。 我需要在每个页面中声明一个数字(5-7)的全局变量。 一个页面中的变量独立于其他页面,即使有些可能相同。

目前我在页面顶部和任何功能之外声明。

我应该采取不同的方法吗?这种方法有副作用吗?

如果完全重复,请告诉我。 谢谢

【问题讨论】:

  • 是否必须使用这些全局变量并且根本没有解决方法?
  • 与许多语言不同,Javascript 中有 no 块和 no 模块命名空间。除了您自己明确创建的名称空间之外,只有两个名称空间:1) 您所在的函数,以及 2) everything 的全局名称。定义在“文件顶部”和/或“在任何函数之外”的 Javascript 变量实际上(并且没有任何消息提醒您注意这一事实)对 everything(不仅仅是块或模块)是全局的)。多个文件中的相同声明要么都引用同一个变量,要么“隐藏”较早的变量。

标签: javascript global-variables


【解决方案1】:

最好不要弄乱全局范围。特别是因为其他框架或插入式脚本可能会污染或覆盖您的变量。

为自己创建一个命名空间

https://www.geeksforgeeks.org/javascript-namespace/

更多:https://stackoverflow.com/search?q=namespace+javascript+global

使用不同方法设置变量的一些示例

myOwnNS = {}; // or window.myOwnNS
myOwnNS.counter = 0;
myOwnNS["page1"] = { "specificForPage1":"This is page 1"}
myOwnNS.page2 = { "specificForPage2":"This is page 2", "pagenumber":2}
myOwnNS.whatPageAmIOn = function { return location.href.substring(location.href.lastIndexOf('page')+4)}

【讨论】:

【解决方案2】:

正如@mplungjan 所说,最佳实践是尽可能避免使用全局变量。

由于 window 是全局的,因此您可以在任何时候使用 window.NAMESPACE = {}; 在任何函数内声明命名空间

然后您可以从同一个或另一个函数中全局访问 NAMESPACE 并将您的值设置为属性:

NAMESPACE = { var1:"value", var2:"value" /* etc */ };

如果您可以在脚本文件中而不是直接在页面中执行所有这些操作,那就更好了,但是我猜您可能没有静态脚本中可用的值。

【讨论】:

    【解决方案3】:

    一种方法是在“根”级别声明变量,即在任何其他 JS 代码尝试访问它之前,在任何代码块之外。

    您可以使用window.variablename = value; 设置全局变量,至少表面上保持干净。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 2021-07-14
      • 2021-10-22
      • 2020-12-13
      • 2018-12-16
      相关资源
      最近更新 更多