Javascript命名空间初始化模式需要'var'或'window'`
我在JavaScript初始化中遇到了以下模式:Javascript命名空间初始化模式需要'var'或'window'`,javascript,namespaces,Javascript,Namespaces,我在JavaScript初始化中遇到了以下模式: foo = foo || {}; alert('no errors!'); 但它似乎不起作用,除非以前定义了foo 同一模式的两种变体似乎都能正常工作: var foo = foo || {}; alert('no errors!'); 及 在我看来,我不明白为什么第一个不起作用,而另两个却起作用 为什么呢?您能详细解释一下吗?您不能读取未定义的变量()。这就是为什么 something = foo; 如果未声明foo变量,将导致错误窗口当
foo = foo || {};
alert('no errors!');
但它似乎不起作用,除非以前定义了foo
同一模式的两种变体似乎都能正常工作:
var foo = foo || {};
alert('no errors!');
及
在我看来,我不明白为什么第一个不起作用,而另两个却起作用
为什么呢?您能详细解释一下吗?您不能读取未定义的变量()。这就是为什么
something = foo;
如果未声明
foo
变量,将导致错误<代码>窗口当然是声明的,查询其属性没有问题foo
您无法读取未定义的变量()。这就是为什么
something = foo;
如果未声明
foo
变量,将导致错误<代码>窗口当然是声明的,查询其属性没有问题foo
您无法读取未定义的变量()。这就是为什么
something = foo;
如果未声明
foo
变量,将导致错误<代码>窗口当然是声明的,查询其属性没有问题foo
您无法读取未定义的变量()。这就是为什么
something = foo;
如果未声明
foo
变量,将导致错误<代码>窗口当然是声明的,查询它的属性foo
Javascript有一个全局对象
。在浏览器中,这由名称窗口
引用
window.foo
在全局对象中创建属性
var foo
创建一个全局变量。这与全局对象的属性非常相似,但不能对其使用delete
只需声明foo
而不使用var
关键字,也可以在全局对象上创建属性。这是一个语言设计选择——一个糟糕的选择——但仍然是一个设计选择
var foo
和window.foo
在全球层面上同样有效。如果您位于函数(可能是模块)内部,则必须使用window.foo
确保到达全局对象。Javascript有一个全局对象。在浏览器中,这由名称窗口
引用
window.foo
在全局对象中创建属性
var foo
创建一个全局变量。这与全局对象的属性非常相似,但不能对其使用delete
只需声明foo
而不使用var
关键字,也可以在全局对象上创建属性。这是一个语言设计选择——一个糟糕的选择——但仍然是一个设计选择
var foo
和window.foo
在全球层面上同样有效。如果您位于函数(可能是模块)内部,则必须使用window.foo
确保到达全局对象。Javascript有一个全局对象。在浏览器中,这由名称窗口
引用
window.foo
在全局对象中创建属性
var foo
创建一个全局变量。这与全局对象的属性非常相似,但不能对其使用delete
只需声明foo
而不使用var
关键字,也可以在全局对象上创建属性。这是一个语言设计选择——一个糟糕的选择——但仍然是一个设计选择
var foo
和window.foo
在全球层面上同样有效。如果您位于函数(可能是模块)内部,则必须使用window.foo
确保到达全局对象。Javascript有一个全局对象。在浏览器中,这由名称窗口
引用
window.foo
在全局对象中创建属性
var foo
创建一个全局变量。这与全局对象的属性非常相似,但不能对其使用delete
只需声明foo
而不使用var
关键字,也可以在全局对象上创建属性。这是一个语言设计选择——一个糟糕的选择——但仍然是一个设计选择
var foo
和window.foo
在全球层面上同样有效。如果您在函数(可能是模块)内部,则必须使用window.foo
确保到达全局对象。可能重复的可能重复的可能重复的可能重复的可以读取未定义的变量,不能读取未声明的变量。@Quentin您是指未定义其值的变量。但是我把措辞改得不那么模棱两可。你可以读取未定义的变量,不能读取未声明的变量。@Quentin你是指未定义值的变量。但是我把措辞改得不那么模棱两可。你可以读取未定义的变量,不能读取未声明的变量。@Quentin你是指未定义值的变量。但是我把措辞改得不那么模棱两可。你可以读取未定义的变量,不能读取未声明的变量。@Quentin你是指未定义值的变量。但是我把措辞改得不那么模棱两可。所以你是说,即使我在赋值的右侧使用window.foo
,它仍然会创建window.foo
变量,其值为undefined
?不,它会在window
对象上创建一个属性。要创建变量,您可以使用var.
但是--当您访问任何不存在的对象的属性时,您会得到未定义的值。
因此<代码>window.xyzyFoobar