[英]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.