Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript命名空间初始化模式需要'var'或'window'`_Javascript_Namespaces - Fatal编程技术网

Javascript命名空间初始化模式需要'var'或'window'`

Javascript命名空间初始化模式需要'var'或'window'`,javascript,namespaces,Javascript,Namespaces,我在JavaScript初始化中遇到了以下模式: foo = foo || {}; alert('no errors!'); 但它似乎不起作用,除非以前定义了foo 同一模式的两种变体似乎都能正常工作: var foo = foo || {}; alert('no errors!'); 及 在我看来,我不明白为什么第一个不起作用,而另两个却起作用 为什么呢?您能详细解释一下吗?您不能读取未定义的变量()。这就是为什么 something = foo; 如果未声明foo变量,将导致错误窗口当

我在JavaScript初始化中遇到了以下模式:

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