为什么我在声明子名空间时不能使用var?

时间:2013-04-30 16:12:38

标签: javascript namespaces module-pattern

为什么以下工作

var NameSpace = NameSpace || {}; 
NameSpace.Foo = 2;

但这不是吗?

var NameSpace = NameSpace || {}; 
var NameSpace.Foo = 2;

对于命名空间的变量减速的内部工作方式的任何了解都将受到重视。

3 个答案:

答案 0 :(得分:1)

var foo = foo;

有效,因为ECMAscript会像

那样将这一行解耦
var foo;
foo = foo;
引擎盖下。这个概念通常被称为吊装

您的第二个代码段无法使用,因为我们正在分配对象属性var关键字始终暗示,我们要在当前执行上下文中创建变量符号

你当然可以做的是

var Foo = NameSpace.Foo = 2;

这会

  • 在当前上下文中创建变量Foo
  • Foo对象
  • 上分配对象属性NameSpace
  • 分配2
  • 的值

答案 1 :(得分:1)

JavaScript没有名称空间。您的第一行代码是声明一个名为Namespace的变量,其值为对象:

var NameSpace = NameSpace || {};

然后在对象上创建属性 Foo,并为其指定值:

NameSpace.Foo = 2;

底线:变量和对象属性是不同的东西(除了其他差异,变量有范围,而属性没有)。 var statement仅用于声明变量。

答案 2 :(得分:0)

var保留用于声明新变量,而不是修改现有变量。

此外.是变量名称的无效字符。