为什么以下工作
var NameSpace = NameSpace || {};
NameSpace.Foo = 2;
但这不?
var NameSpace = NameSpace || {};
var NameSpace.Foo = 2;
任何有关名称空间的变量减速的内部工作原理的见解将不胜感激。
为什么以下工作
var NameSpace = NameSpace || {};
NameSpace.Foo = 2;
但这不?
var NameSpace = NameSpace || {};
var NameSpace.Foo = 2;
任何有关名称空间的变量减速的内部工作原理的见解将不胜感激。
var foo = foo;
有效,因为 ECMAscript 会像这样解耦这条线
var foo;
foo = foo;
在引擎盖下。这个概念通常被称为吊装。
您的第二个片段无法工作,因为我们正在分配一个对象属性。var
关键字总是暗示,我们想在当前的执行上下文中创建一个变量,可以说是一个符号。
你当然可以做的是
var Foo = NameSpace.Foo = 2;
这个会
Foo
在当前上下文中创建变量Foo
在对象上分配对象NameSpace
属性2
JavaScript 没有命名空间。您的第一行代码是声明一个变量,其名称为Namespace
,其值为对象:
var NameSpace = NameSpace || {};
然后在对象上创建一个属性 Foo
,并为其赋值:
NameSpace.Foo = 2;
底线:变量和对象属性是不同的东西(在其他差异中,变量有范围,而属性没有)。该var
语句仅用于声明变量。
var
保留用于声明新变量,而不是修改现有变量。
此外.
,变量名称是无效字符。