【问题标题】:Are there any repercussions to storing globals like this?像这样存储全局变量有什么影响吗?
【发布时间】:2013-07-25 01:30:13
【问题描述】:

所以我知道污染引用窗口的全局命名空间是一件坏事,尤其是当您有多个第 3 方引用时。所以这是不可取的:

window.someObject = someObject;

这将在任何地方引用它。如果我改为这样使用它会怎样?

var MyApplication = window.MyApplication;
MyApplication.someObject = someObject;

当然,使用这种方法需要在需要访问这个创建的命名空间的每个模块的顶部引用MyApplication = window.MyApplication。所以回到我的问题。这是在不污染窗口全局命名空间的情况下提供全局访问权限的可接受方法吗?

【问题讨论】:

  • 如果你想要全局访问,你需要有某种全局的。这是常见的做法。
  • 我假设你说这是一种常见的做法,这意味着它是完全可以接受的?

标签: javascript window global


【解决方案1】:

如果你想要全局访问,你需要有某种全局的。这是常见的做法。

来自jQuery source code的一个例子:

_jQuery = window.jQuery,
_$ = window.$,

我相信所有的大框架都是这样做的。我认为用一个容器变量污染全局命名空间是完全可以接受的。

【讨论】:

  • 感谢 jQuery 参考。如果它在其他大型框架中很常见,那么这就是我正在寻找的。我只是想先与社区核实一下,因为这是我自己推断出来的(这可能很危险哈哈)。
  • 几周前,当我开始组织一个项目时,我自己也讨论过同样的事情。我确定这是一个常见问题。
  • 令人惊讶的是,我在网上没有找到太多关于它的信息。大多数文章只是谈到将变量或函数直接添加到窗口命名空间中。
【解决方案2】:

你也可以这样做(在全球范围内):

(function(lib) {

  // in here, lib references window.MyApplication
  ...

}(MyApplication));

所以你可以很容易的改变传入的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2019-07-23
    • 2016-05-09
    • 2012-11-05
    相关资源
    最近更新 更多