为什么名称空间在JavaScript中被认为是不好的做法?

Eli*_*lka 4 javascript namespaces

我被告知不应该使用命名空间,因为它们"污染"全球范围.我想知道有什么选择?

当我想为网站定义实用函数和/或常量时,一个简单的方法是通过命名空间定义它们,这样对全局范围的损害仅限于一个对象.

如果命名空间是不好的做法,我会想到几个问题:

  1. 为什么这是不好的做法?
  2. 这个声明的范围是什么(网络应用程序/动态网站/静态网站等)?
  3. 有哪些替代方案?

这个问题是关于使用extend.js的好处的帖子开始讨论的结果.

Ray*_*nos 8

为什么这是不好的做法?

命名空间本身很糟糕,因为它是一个不必要的概念.

拥有属性和方法的对象是可以接受的.拥有一个类似于"命名空间"的"模块"标记也没关系,但意思是每个文件都有一个"模块"标记,其中包含所有属性和方法.这与"命名空间"不同,因为它仅在单个文件中创建/更改,并且不作为全局令牌公开.

这个声明的范围是什么(网络应用程序/动态网站/静态网站等)?

所有ECMAScript,永远不会创建新的全局令牌

有什么选择?

而不是拥有命名空间,你应该支持多个"文件本地"令牌.这意味着每个文件/"模块"应该包装在一个闭包中,你应该可以访问这个闭包内的多个局部变量.

全局变量也很糟糕,因为你根本不需要它们.避免全局变量的方法是将所有内容包装在闭包中,并在加载外部javascript文件时保持智能.

零全局模块加载器的示例

进一步阅读: