var a = something 和 window.a = someting 之间有什么区别吗?
Is there any difference between var a = something and window.a = someting?
我是 JavaScript 世界的新手,在我对 全局对象 (通常是 window)了解很多之后我感到很困惑,并且知道它只是一个对象,就像我创建的任何对象一样,var 在全局对象中设置属性,这与 let
不同
之后
window.a = something(like in any object)和 var a = something 之间有什么区别吗?
如果您想要全局变量 a
,请使用 window.a =
。这意味着任何 JS 代码都可以访问这个变量。而 var a =
是声明变量的常用方式。在这种情况下,变量只能在其容器内访问。
不,除了在 Node.js 中,其中 a = 5
或 var a = 5
(连同 let
和 const
)不会将值分配给global.a
。你必须明确地说 global.a = 5
.
在全局上下文中,使用 var
与分配给 window
确实非常相似。但是,是有一些不同。以下是我能想到的一些:
var
声明是 提升,这意味着您可以在声明变量之前使用用 var
声明的变量。另一方面,尝试在分配发生之前使用分配给 window
的内容将产生 ReferenceError
:
// This is okay. The variable declaration is hoisted, so you can use it before
// it's been declared (although it won't be assigned its value until later).
console.log(a);
var a = "hello world";
// On the other hand, without var, this creates an error.
console.log(a);
window.a = "hello world";
- 无法从全局对象中删除使用
var
声明的变量,但可以删除对 window
的简单赋值:
var a = "hello world";
console.log(a);
delete window.a; // Does nothing for `var`.
console.log(a);
window.a = "hello world";
console.log(a);
delete window.a; // This will delete it, further access creates a ReferenceError.
console.log(a);
- 当然,
var
声明的范围仅限于当前执行上下文。在全局范围内,这与分配给 window
没有区别,但在函数内,当函数 returns. 时,var
将消失
function foo() {
var a = "hello world";
console.log(a);
}
foo();
console.log(a); // ReferenceError
function foo() {
window.a = "hello world";
console.log(a);
}
foo();
console.log(a); // still exists here
我是 JavaScript 世界的新手,在我对 全局对象 (通常是 window)了解很多之后我感到很困惑,并且知道它只是一个对象,就像我创建的任何对象一样,var 在全局对象中设置属性,这与 let
不同之后 window.a = something(like in any object)和 var a = something 之间有什么区别吗?
如果您想要全局变量 a
,请使用 window.a =
。这意味着任何 JS 代码都可以访问这个变量。而 var a =
是声明变量的常用方式。在这种情况下,变量只能在其容器内访问。
不,除了在 Node.js 中,其中 a = 5
或 var a = 5
(连同 let
和 const
)不会将值分配给global.a
。你必须明确地说 global.a = 5
.
在全局上下文中,使用 var
与分配给 window
确实非常相似。但是,是有一些不同。以下是我能想到的一些:
var
声明是 提升,这意味着您可以在声明变量之前使用用var
声明的变量。另一方面,尝试在分配发生之前使用分配给window
的内容将产生ReferenceError
:
// This is okay. The variable declaration is hoisted, so you can use it before
// it's been declared (although it won't be assigned its value until later).
console.log(a);
var a = "hello world";
// On the other hand, without var, this creates an error.
console.log(a);
window.a = "hello world";
- 无法从全局对象中删除使用
var
声明的变量,但可以删除对window
的简单赋值:
var a = "hello world";
console.log(a);
delete window.a; // Does nothing for `var`.
console.log(a);
window.a = "hello world";
console.log(a);
delete window.a; // This will delete it, further access creates a ReferenceError.
console.log(a);
- 当然,
var
声明的范围仅限于当前执行上下文。在全局范围内,这与分配给window
没有区别,但在函数内,当函数 returns. 时,
var
将消失
function foo() {
var a = "hello world";
console.log(a);
}
foo();
console.log(a); // ReferenceError
function foo() {
window.a = "hello world";
console.log(a);
}
foo();
console.log(a); // still exists here