1

为什么以下工作

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

但这不?

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

任何有关名称空间的变量减速的内部工作原理的见解将不胜感激。

4

3 回答 3

1
var foo = foo;

有效,因为 ECMAscript 会像这样解耦这条线

var foo;
foo = foo;

在引擎盖下。这个概念通常被称为吊装

您的第二个片段无法工作,因为我们正在分配一个对象属性var关键字总是暗示,我们想在当前的执行上下文中创建一个变量,可以一个符号

你当然可以做的是

var Foo = NameSpace.Foo = 2;

这个会

  • Foo在当前上下文中创建变量
  • Foo在对象上分配对象NameSpace属性
  • 分配两个值2
于 2013-04-30T16:15:31.417 回答
1

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

var NameSpace = NameSpace || {};

然后在对象上创建一个属性 Foo,并为其赋值:

NameSpace.Foo = 2;

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

于 2013-04-30T16:38:24.150 回答
0

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

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

于 2013-04-30T16:14:35.073 回答