JavaScript NameSpace Global Variable vs Global Property
关于在javascript中创建名称空间,我有两个部分的问题,以下哪一个是定义名称空间的正确/更好的方法:
1 2 3 4 5 6 7 8 9 | // 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的使用,第二个是样式2不使用var键。
这两种风格似乎都有效,而现在这正是它真正令人困惑的地方。如果我从样式1中删除var键,那么名称空间根本就不起作用。我觉得公司是没有定义的。我认为这与VaR创建全局变量有关,如果没有VaR,我们将创建一个全局属性,如本文所述。
var关键字的用途是什么?何时使用它(或忽略它)?
请给我解释一下没有var键的样式1为什么会失败?
非常感谢。
这是喜欢的问题,但我更喜欢第一个,因为它较短,可读性更强。
第一种风格的"意思"是:
创建局部变量"company"。如果它存在于一个上限范围内(并且它的值不是错误的),那么将它指定给这个变量,否则将成为一个新的对象。
第二个"意思"
如果新对象未定义,则将其赋给公司变量;如果新对象已定义,则将其赋给公司变量。
如果删除"var",则第一个引用将触发引用错误,因为第二个引用(company=company)不存在,而且解释器不知道如何处理该错误。如果它存在,即使删除"var",它也会工作。
第一种样式的另一个注意事项是,即使公司是一个错误的值,如0、null或"