如何检查ES6上是否声明了“let”变量

How can I check if a `let` variable has been declared on ES6?

本文关键字:声明 let 变量 是否 何检查 检查 ES6      更新时间:2023-09-26

与传统的var声明变量不同,后者附加到整个封闭的函数范围,无论它们出现在哪里——let声明附加到块范围,但直到它们出现在块中才初始化

因此:

console.log( a ); // undefined
console.log( b ); // ReferenceError!
var a;
let b;

因此,这里似乎不适用吊装。

问题

如果是,我如何安全地检查变量是否已声明?

注意-我看到的选项是try/catch,当然总是将let变量放在作用域的第一位。但我的问题仍然是

这里似乎不适用吊装。

不完全是。变量仍然覆盖整个范围,在输入范围时创建绑定,就像var s一样。

但您是对的,与var相比,它不会立即用undefined初始化,只有在评估let语句时才会初始化。从作用域顶部到那里的区域被称为时间死区-标识符是绑定的,但在使用时总是抛出ReferenceError

如何安全地检查变量是否已声明?

你不能,就像你不能vars1一样。你根本不需要这个。

1:让我们忽略全局变量2,它们在这里成为全局对象的属性
2:var/function/function*——声明变量,我的意思是。词汇绑定(letconst)实际上并没有成为全局属性

这将是最接近您想要的:

try {
    console.log(typeof mima); // or any other use of variable
    let mima = 'no ni ma';
} catch (error) {
    console.log(error); // “Uncaught ReferenceError: mima is not defined(…)”
    // and then taking some actions regarding the situation
}

尽管如此,它的有用性还是有争议的。但如果必须检查let的变量,我会使用类似的方法。但是,请注意,不能安全地使用let创建缺少的变量,因为它被catch块包围。但它不会破坏代码。