初始化与赋值
Initialization vs assignment
术语 "initialization" 和 "assignment" 似乎可以互换使用。我做了一些搜索,似乎在技术上可能有所不同。我的理解是,在变量的上下文中,当 JavaScript 引擎使其可供使用和赋值(无论是显式完成 [如 let foo = 1;
] 还是由 JavaScript 引擎,如以下示例所示)是实现此目的的一种方法。
let foo;
console.log(foo); // undefined (initialization and assignment?)
我的理解对吗?另外(如果是这样),初始化期间实际发生了什么以使变量可用?
TLDR:
{ // declaration (hoisted)
// Temporal deadzone
let foo; // declaration and initialization to undefined
foo = 1; // assignment
}
长一点:
Declaration
声明变量意味着我们在当前范围内保留标识符。在 javascript 中声明被提升,这意味着它在变量所在的范围可见时被声明(它所在的块被执行)。但是,您现在无法像
中那样访问该变量
这是代码的特定部分,位于作用域开始和初始化之间。尝试访问此处的变量会导致错误。
Initialization
初始化发生在您声明变量的行中。它将 分配 一个值给变量,并使其可供访问。例如:
let foo;
会将foo
初始化为undefined
,
let foo = 2;
会将foo
初始化为2
。
Assignment
...只是意味着你改变了一个变量的值。 javascript 中的所有赋值都使用 =
。初始化基本上就是第一次assinment。
上面的解释不适用于用var
声明的变量,所以不要用var
以免混淆:)
术语 "initialization" 和 "assignment" 似乎可以互换使用。我做了一些搜索,似乎在技术上可能有所不同。我的理解是,在变量的上下文中,当 JavaScript 引擎使其可供使用和赋值(无论是显式完成 [如 let foo = 1;
] 还是由 JavaScript 引擎,如以下示例所示)是实现此目的的一种方法。
let foo;
console.log(foo); // undefined (initialization and assignment?)
我的理解对吗?另外(如果是这样),初始化期间实际发生了什么以使变量可用?
TLDR:
{ // declaration (hoisted)
// Temporal deadzone
let foo; // declaration and initialization to undefined
foo = 1; // assignment
}
长一点:
Declaration
声明变量意味着我们在当前范围内保留标识符。在 javascript 中声明被提升,这意味着它在变量所在的范围可见时被声明(它所在的块被执行)。但是,您现在无法像
中那样访问该变量这是代码的特定部分,位于作用域开始和初始化之间。尝试访问此处的变量会导致错误。
Initialization
初始化发生在您声明变量的行中。它将 分配 一个值给变量,并使其可供访问。例如:
let foo;
会将foo
初始化为undefined
,
let foo = 2;
会将foo
初始化为2
。
Assignment
...只是意味着你改变了一个变量的值。 javascript 中的所有赋值都使用 =
。初始化基本上就是第一次assinment。
上面的解释不适用于用var
声明的变量,所以不要用var
以免混淆:)