初始化与赋值

Nat*_*lie 1 javascript computer-science

术语“初始化”和“赋值”似乎可以互换使用。我做了一些搜索,似乎技术上可能存在差异。我的理解是,在变量的上下文中,当 JavaScript 引擎使其可供使用时,变量就会被初始化,而赋值(无论是显式完成 [如let foo = 1;] 还是由 JavaScript 引擎完成,如下例所示)是一种方法为了达成这个。

let foo;
console.log(foo); // undefined (initialization and assignment?)
Run Code Online (Sandbox Code Playgroud)

我的理解正确吗?另外(如果是这样),在初始化过程中实际发生了什么以使变量可用?

Jon*_*lms 6

总而言之:

{ // declaration (hoisted)
  // Temporal deadzone
  let foo; // declaration and initialization to undefined
  foo = 1; // assignment
}
Run Code Online (Sandbox Code Playgroud)

有点长:

宣言

声明变量意味着我们在当前范围内保留标识符。在 javascript 中,声明是提升的,这意味着当变量所在的范围可见时(它所在的块被执行),它就会被声明。但是您现在无法访问该变量,因为它位于

时间死区

这是范围开始和初始化之间的代码的特定部分。尝试访问此处的变量会导致错误。

初始化

初始化发生在声明变量的行中。它将为变量分配一个值并使其可供访问。例如这个:

let foo;
Run Code Online (Sandbox Code Playgroud)

将初始化fooundefined,

let foo = 2;
Run Code Online (Sandbox Code Playgroud)

将初始化foo2.

任务

...只是意味着您更改了变量的值。javascript 中的所有赋值都使用=. 初始化基本上只是第一次分配。

上面的解释不适用于用 声明的变量var,所以不要使用var以避免混淆:)