【问题标题】:Does the javascript global namespace get cleared with each full postback?javascript 全局命名空间是否会在每次完整回发时被清除?
【发布时间】:2023-03-23 01:51:02
【问题描述】:

我一直在阅读有关将全局命名空间与全局变量和函数混淆的危险。

我刚刚读到,定义全局函数的“旧”方式存在问题,尤其是在有多个开发人员在同一个项目上工作的情况下。

我理解并想写出我能写的最好的代码,但上面的陈述让我很困惑。

开发人员很少在项目的同一页面上工作,我认为全局命名空间会随着用户更改项目中的页面而清除。

不是这样吗?

【问题讨论】:

  • 我建议这个问题的标题不是很能描述这个问题。实际问题的答案是“是”,命名空间被清除。但问题在于为什么需要使用某种命名空间设备。原因是您可能会遇到标识符冲突(“全局命名空间混乱”)
  • 嗯,我理解需要。正是我正在阅读的那篇文章让我感到担忧。我认为作者是在暗示全局命名空间可能在同一个域中保持活跃。 (我不认为这是真的,但想验证一下)

标签: javascript global-namespace


【解决方案1】:

开发人员很少在项目的同一页面上工作,我认为全局命名空间会随着用户更改项目中的页面而清除。

是的,每次请求都会清除全局命名空间,但这不是污染全局命名空间的理由。您似乎在考虑一个小型开发团队,在同一个房间里工作。但是,即便如此,如果一位开发人员决定使用一些第三方库或小部件怎么办?如果该小部件修改了全局命名空间,它可能会干扰您当前的代码。这就是为什么最好的做法是避免在全局命名空间上创建变量/函数。

【讨论】:

  • 谢谢!这很有意义。我只在小团队工作过,我想做那些更了解的人建议的事情。我只是想更好地理解这件事。
【解决方案2】:

“开发人员很少在项目的同一页面上工作”

根据我的经验,这个假设是错误的。特别是,将库用于常用功能是一种很好的做法。库的关键在于它是可重用的。因此,根据定义,图书馆作者正在“在您的”页面上工作。

【讨论】:

  • 啊!我没有考虑开发人员在我的页面引用的库上工作!
  • 嗯,这只是一个例子。即便如此,许多开发人员仍致力于页面的核心功能。
【解决方案3】:

开发人员很少在项目的同一页面上工作

这是非常不真实的。在维护公司网站的过程中,很容易雇佣和解雇多个开发人员,他们可能都必须在您创建的同一页面上工作。

【讨论】:

  • 也许我应该说,'我很少遇到开发人员在同一页面上工作的情况。'
【解决方案4】:

首先 - 是的,当页面重新加载时,所有 javascript 都会重新初始化。因此,如果您有以下 window.foo 在每次页面加载时始终为一个:

window.foo = 1;

alert(foo);

window.foo++;

第二 - 在团队中(或在您的项目中)一种您可以使用命名空间的方式是这样的:

var myCompany = {};

myCompany.Utils = {};

myCompany.Utils.doSomething = function() {
  alert("doSomething");
};

myCompany.Utils.doSomethingElse = function() {
  alert("doSomethingElse");
};

myCompany.Utils.doSomethingElse();

这不仅可以防止您的开发团队内部发生“冲突”。它还可以防止您的代码与您页面上引用的另一个 3rd 方 javascript 意外“冲突”。

【讨论】:

    猜你喜欢
    • 2012-02-10
    • 2016-12-01
    • 1970-01-01
    • 2013-11-19
    • 2016-08-03
    • 1970-01-01
    • 2014-09-27
    • 2017-01-04
    • 2015-04-22
    相关资源
    最近更新 更多