我对JavaScript的命名空间有疑问。命名空间的优点是什么?我什么时候才能使用命名空间?使用全局变量是不好习惯吗?
答案 0 :(得分:3)
将所有变量存储在全局命名空间中是一种不好的做法,主要是因为你打开了自己的名字冲突。例如,如果您定义一个名为Foo
的函数并导入一个也定义Foo
的JavaScript文件,它们将发生冲突,并且在调用时最终会被隐藏。
命名空间的优点与其他语言类似:
我相信,无论何时开始编写JavaScript,都应该避免将函数添加到全局命名空间,并将代码保存在自己的命名空间中:
var MyLibrary = MyLibrary || {};
MyLibrary.x = function() { ... };
这是一个很好的习惯。
答案 1 :(得分:2)
var company = company || {} ;
company.doSomething = function() {
};
company.test = {};
company.test.submodule = {};
company.test.submodule.doSomething = function() {};
company.api = {};
company.api.submodule = {};
通常应避免全局定义变量。对于清晰的可维护代码,请将对象用作名称空间,并避免污染全局名称空间。
这也极大地增强了默认的JS功能。如果您非常热衷于此,请在您的项目中添加类似require.js的内容,您将获得非常好的类似Java的功能。
因此,使用require.js,您的company.api和company.test可以放在不同的文件中并相互要求,就像使用Java包一样导入company.test。
命名空间是一种非常有效的做法。你得到:
答案 2 :(得分:1)
一般来说,命名空间的好处是:
无论何时构建任何大小或复杂的项目,都可以使用命名空间。
Globals通常是一个问题,因为它更容易命名冲突和不同文件之间的意外副作用。
答案 3 :(得分:1)
如果可以避免使用全局变量,那么它总是很糟糕,因为它会使您无法控制的命名空间变得混乱。如果引入新插件,或者第二个程序员在您的代码上工作,并且全局变量名称被共享,那么这可能会很糟糕,那么您将会遇到非常不受欢迎且难以跟踪的错误。
通过使用您自己的命名空间,您可以将您的功能和变量隔离到一个独特,安全的小茧中。 :d