每次完整回发都会清除javascript全局命名空间吗?

时间:2012-05-02 17:32:13

标签: javascript global-namespace

我一直在阅读使用全局变量和函数混淆全局命名空间的危险。

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

我理解并希望编写尽可能最好的代码,但上述陈述让我感到困惑。

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

情况不是这样吗?

4 个答案:

答案 0 :(得分:1)

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

这种假设在我的经历中是错误的。特别是,最好将库用于常用功能。库的关键点在于它是可重用的。因此,根据定义,图书馆作者正在“处理您的”页面。

答案 1 :(得分:1)

  

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

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

答案 2 :(得分:1)

  

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

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

答案 3 :(得分:1)

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

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();

这不仅可以防止开发团队中出现“冲突”。它还会隔离您的代码,使其与您网页上引用的其他第三方javascript意外“冲突”。