<分区>
有人告诉我不应该使用 namespace ,因为它们“污染”了全局范围。我想知道有哪些替代方案?
当我想定义效用函数和/或常量时,例如对于网站,一种简单的方法是通过 namespace 定义它们,这样对全局范围的损害仅限于一个对象。
如果 namespace 是不好的做法,我会想到几个问题:
- 为什么这是不好的做法?
- 此声明的范围是什么(网络应用程序/动态网站/静态网站等)?
- 有哪些替代方案?
这个问题是在 a post on the benefits of using extend.js 上开始的讨论的结果.
why is this bad practice?
命名空间本身是不好的,因为它是一个不必要的概念。
拥有具有属性和方法的对象是可以接受的。拥有一个类似于“命名空间”的“模块” token 也很好,但意思是每个文件都有一个“模块” token ,其中包含您的所有属性和方法。这与“命名空间”不同,因为它仅在单个文件中创建/更改,不会作为全局 token 公开。
what's the scope of this declaration (web applications / dynamic websites / static websites etc.)?
所有 ECMAScript,从不创建新的全局 token
what are the alternatives?
与其使用命名空间,不如使用多个“本地文件”标记。这意味着每个文件/“模块”都应该被包裹在一个闭包中,并且您应该可以访问这个闭包内的多个局部变量。
全局变量也很糟糕,因为您根本不需要它们。避免全局变量的方法是将所有内容包装在闭包中,并智能地加载外部 javascript 文件。
零全局模块加载器的例子
进一步阅读: