Javascript 命名空间约定

7

我不确定使用哪种更好的命名空间约定。

var App = {}; // global variable, the root of our namespace
(function() {

   App.something = function() {

   }

})();

或者

(function() {

   window.App = {}; //global variable, the root of our namespace

   App.something = function() {

   }

})();

window.App 和 var App 都是全局变量,所以两种约定都可以实现相同的结果,但哪种更好呢?


1
没有一个更好,它们(几乎)是等价的。 - bfavaretto
1
好的,当使用 var App = {}; 时,您不能使用 delete window.App 来删除该属性。但是当您将其声明为 window.App = {}; 时,您可以这样做。但这真的是一个微不足道的原因,用其中之一来代替另一个。 - Ian
2
这个问题可能会被关闭,因为它基于个人观点。 - gustavohenke
3
如果您不在浏览器中运行,会怎样呢? - SLaks
@SLaks 那是一个很好的观点。谢谢。 - monsoon
显示剩余2条评论
1个回答

3
唯一的区别是在第一个变体中,App 无法从 window 中删除,尽管它作为全局对象的属性是可以访问的。在第二种情况下,delete window.App 是有效的。另外,请注意应将你的名称空间附加到 window 而不是 Window ,因为JavaScript是大小写敏感的,而Window是一个构造函数。 除此之外,两者基本相同,没有“更好”的一种方案。

窗口上的大写是一个错误,但还是谢谢你让我知道了。你会说在 JS 社区中有一种约定比另一种更常用吗? - monsoon
2
我不确定,但第二个看起来更简洁。另一个常见的是 var App = (function(){ /* 在此处返回您的对象 */ }()) - bfavaretto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接