我真的不明白下面的代码片段会发生什么。
由于时间死区,我预计会出现错误,但看起来const baz = '123123';
会被提升。
一切运作的原因是什么?
class Foo {
constructor() {
console.log('Foo baz is:', baz)
}
}
function log() {
console.log('log baz is:', baz);
}
const baz = '123123';
log();
new Foo();

答案 0 :(得分:2)
不需要悬挂。
在调用之前,函数不会尝试访问变量。
在定义常量并为其指定值之前,不要调用它们。
答案 1 :(得分:0)
const
声明被提升(排序),因此您的代码看起来像这样:
const baz; // hoisted, sort-of
class Foo {
constructor() {
console.log('Foo baz is:', baz)
}
}
function log() {
console.log('log baz is:', baz);
}
baz = '123123'; // not really possible because it's const
log();
new Foo();
所以这里有一个死区,但死区没有发生发生;你不会在之后死区进行函数调用,所以它一切都很好。在嵌套函数上下文中在死区中提及符号是很好的。死区是关于积极的"触摸"在其实际宣布点之前悬挂的符号。
实际上,因为"暂时死区"概念,将const
和let
声明视为"悬挂"并不是真正有意义的。 var
声明的方式。这个特殊的例子很好地说明了声明如何被提升,因为嵌套词法上下文中的引用确实起作用,因为符号是由这些函数中的代码实际运行的时间定义的。