与传统的变量声明不同,传统的变量声明会附加到整个封闭函数范围,而不管它们出现在哪里。但是,
let
声明会附加到块级作用域,但是在块中出现之前不会初始化。
因此:
console.log( a ); // undefined
console.log( b ); // ReferenceError!
var a;
let b;
所以看起来这里没有应用提升。
问题
如果是这样,我该如何安全地检查变量是否已声明?
NB - 我所看到的选择是使用try/catch,并且当然始终将let
变量放在作用域的最前面。但我的问题仍然存在。
let
还是var
)是否已声明。你只能检查它们是否已定义。不过,你为什么要这样做呢?你的使用场景是什么? - Aadit M Shahlet
做一些不打算做的事情时,这真的算是学习吗?它是一个块级作用域,因此没有理由在该块之外检查它。 - GillesClet
变量。 - GillesC