我有两个关于在JavaScript中创建命名空间的问题,其中一个是定义命名空间的正确/更好的方法:
// style 1
var company = company || {};
company.models = company.models || {};
company.models.class = {...}
// style 2
company = typeof (company) == 'undefined' ? {} : company;
company.models = company.models || {};
company.models.class = {...}
请注意,款式有两个不同之处。首先是使用typeof和Second是样式2不使用var键。
这两种风格似乎都有效,现在这里的风格让人感到困惑。如果我从样式1中删除var键,那么命名空间根本不起作用。我得到像公司没有定义的东西。我认为它与var创建一个全局变量有关,而没有var我们正在创建一个全局属性,如这里所述
What is the purpose of the var keyword and when to use it (or omit it)?
有些人请向我解释为什么样式1在没有var键的情况下失败了吗?
非常感谢提前。
答案 0 :(得分:1)
这是喜欢的问题,但我更喜欢第一个,因为它更短,更易读。
第一种风格'表示':
创建本地变量' company'。如果它在一个较高的范围内存在(并且它的值不是假的),则将该变量设置为另一个新的对象。
第二个'表示'
如果新对象未定义,则为公司变量分配;如果已定义,则为其自身分配。
如果您删除' var'第一个会触发ReferenceError。因为第二个参考(公司= 公司)不存在,并且解释器不知道如何处理。如果它存在,即使您删除' var'。
也会有效第一种风格的另一个注意事项是公司将被新对象覆盖,即使它是一个假值,如0,null或""