0

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

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

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

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

不是这样吗?

4

4 回答 4

1

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

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

于 2012-05-02T17:35:41.120 回答
1

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

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

于 2012-05-02T17:35:54.250 回答
1

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

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

于 2012-05-02T17:38:53.800 回答
1

首先 - 是的,当页面重新加载时,所有 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-05-02T17:40:56.337 回答