我一直在阅读有关将全局命名空间与全局变量和函数混淆的危险。
我刚刚读到定义全局函数的“旧”方法是有问题的,尤其是在您有多个开发人员在同一个项目上工作的情况下。
我理解并想写出我能写的最好的代码,但上面的陈述让我感到困惑。
开发人员很少在项目的同一页面上工作,我假设全局命名空间会随着用户更改项目中的页面而清除。
不是这样吗?
我一直在阅读有关将全局命名空间与全局变量和函数混淆的危险。
我刚刚读到定义全局函数的“旧”方法是有问题的,尤其是在您有多个开发人员在同一个项目上工作的情况下。
我理解并想写出我能写的最好的代码,但上面的陈述让我感到困惑。
开发人员很少在项目的同一页面上工作,我假设全局命名空间会随着用户更改项目中的页面而清除。
不是这样吗?
“开发人员很少在项目的同一页面上工作”
根据我的经验,这个假设是错误的。特别是,将库用于常用功能是一种很好的做法。库的关键在于它是可重用的。因此,根据定义,图书馆作者正在“在您的”页面上工作。
开发人员很少在项目的同一页面上工作
这是非常不真实的。在维护公司网站的过程中,很容易雇佣和解雇几个开发人员,他们可能都必须在您创建的同一页面上工作。
开发人员很少在项目的同一页面上工作,我假设全局命名空间会随着用户更改项目中的页面而清除。
是的,每次请求都会清除全局命名空间,但这不是污染全局命名空间的理由。您似乎在考虑一个小型开发团队,在同一个房间里工作。但是,即便如此,如果一位开发人员决定使用一些第三方库或小部件怎么办?如果该小部件修改了全局命名空间,它可能会干扰您当前的代码。这就是为什么最好的做法是避免在全局命名空间上创建变量/函数。
首先 - 是的,当页面重新加载时,所有 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 意外“冲突”隔离开来。