繁体   English   中英

用单独初始化提升 let、const

[英]Hoisting of let, const with separate initialization

Documentaion中说 let 和 const 被提升了。

使用 let 和 const 声明的变量也会被提升,但与 var 不同的是,它不会使用默认值进行初始化。 如果在初始化之前读取使用 let 或 const 声明的变量,则会引发异常。

那里还有一个非常清晰的示例:

 console.log(num); // Throws ReferenceError exception as the variable value is uninitialized
 let num = 6; // Initialization

但我不明白为什么这也会增加 ReferenceError :

 x = 9 console.log(x) // Why: "Throws ReferenceError exception as the variable value is uninitialized" here ? let x;

规格说“让”支持吊装。 在使用此变量之前进行初始化。 怎么了? 如果 ReferenceError 的原因是 TDZ 那么为什么在规范中说 'let' 支持 hoising,因为 TDZ 和 hoising 是相互排斥的东西......如果我不能使用 'let' 的 hoising 可能是什么例子这个变量在声明之前...

为什么在console.log行中由于变量值未初始化而引发 ReferenceError 异常?

它没有。 它在访问变量时抛出它,其中包括赋值:

 x = 9; // exception happens here already! let x;

您根本不能使用未初始化的变量。 它仅在评估let / const语句本身时才被初始化。

如果我不能在声明之前使用这个变量,那么提升 'let' 的例子是什么?

你不能使用它,但你可以引用它,例如通过在它上面创建一个闭包:

 function log() { console.log(x); } // log(); - would fail here let x = 9; log();

这也意味着引用x实际上将引用那个未初始化的变量,而不是来自外部范围的其他x 请参阅是否使用 let 或 const 提升了声明的变量? 更多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM