初始化与赋值

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以免混淆:)