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