【发布时间】:2012-04-20 16:47:25
【问题描述】:
有人告诉我不应该使用命名空间,因为它们会“污染”全局范围。我想知道有什么替代方案?
当我想定义实用函数和/或常量时,例如对于一个网站,一个简单的方法是通过命名空间来定义它们,这样对全局范围的损害仅限于一个对象。
如果命名空间是不好的做法,我会想到几个问题:
- 为什么这是不好的做法?
- 此声明的范围是什么(网络应用程序/动态网站/静态网站等)?
- 有哪些替代方案?
这个问题是在a post on the benefits of using extend.js 发起的讨论的结果。
【问题讨论】:
-
而且我一直认为命名空间正是为了不污染全局范围......(
->它们是好)。跨度> -
是的,有人反其道而行之。
-
@FelixKling 命名空间仍然污染全局范围。你永远不需要 JavaScript 中的全局标记。任何使用它们的人都做错了。
-
@Raynos:当然,每个顶级命名空间都会在全局范围内创建一个符号……但如果它不这样做,您将如何访问外部库?
-
@FelixKling 使用闭包的自定义模块加载器。库不应该公开全局令牌,它们应该使用 AMD 或 commonJS 等标准格式公开它们的模块,并且模块加载器应该提取这些模块并处理模块间的依赖关系。这可以通过零个用户创建的全局令牌来完成(甚至避免临时全局令牌)
标签: javascript namespaces