JavaScript NameSpace全局变量与全局属性

时间:2015-02-21 00:34:20

标签: javascript namespaces global-variables

我有两个关于在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键的情况下失败了吗?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

这是喜欢的问题,但我更喜欢第一个,因为它更短,更易读。

第一种风格'表示':

创建本地变量' company'。如果它在一个较高的范围内存在(并且它的值不是假的),则将该变量设置为另一个新的对象。

第二个'表示'

如果新对象未定义,则为公司变量分配;如果已定义,则为其自身分配。

如果您删除' var'第一个会触发ReferenceError。因为第二个参考(公司= 公司)不存在,并且解释器不知道如何处理。如果它存在,即使您删除' var'。

也会有效

第一种风格的另一个注意事项是公司将被新对象覆盖,即使它是一个假值,如0,null或""