如何检查ES6上是否声明了“let”变量
How can I check if a `let` variable has been declared on ES6?
与传统的var声明变量不同,后者附加到整个封闭的函数范围,无论它们出现在哪里——let
声明附加到块范围,但直到它们出现在块中才初始化
因此:
console.log( a ); // undefined
console.log( b ); // ReferenceError!
var a;
let b;
因此,这里似乎不适用吊装。
问题
如果是,我如何安全地检查变量是否已声明?
注意-我看到的选项是try/catch,当然总是将let
变量放在作用域的第一位。但我的问题仍然是
这里似乎不适用吊装。
不完全是。变量仍然覆盖整个范围,在输入范围时创建绑定,就像var
s一样。
但您是对的,与var
相比,它不会立即用undefined
初始化,只有在评估let
语句时才会初始化。从作用域顶部到那里的区域被称为时间死区-标识符是绑定的,但在使用时总是抛出ReferenceError
。
如何安全地检查变量是否已声明?
你不能,就像你不能var
s1一样。你根本不需要这个。
1:让我们忽略全局变量2,它们在这里成为全局对象的属性
2:var
/function
/function*
——声明变量,我的意思是。词汇绑定(let
、const
)实际上并没有成为全局属性
这将是最接近您想要的:
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
块包围。但它不会破坏代码。
相关文章:
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 直接在函数声明上使用function.prototype.bind
- 获取HTML属性中CSS声明的值
- 对API数据使用声明性绑定
- 带有let的JS/EECMAScript6私有字段的模式
- 可以Resharper在我的javascript函数声明中添加分号
- 如何为排除无穷大和NaN的数字声明Flow类型
- 此行是否包含函数声明
- Javascript以不同的方式声明数字
- 如何使用php文件中的GET来获取我在.js文件中声明的变量
- 使用同一对象中的其他变量声明变量
- 如何在AngularJS工厂中正确声明对象属性
- 用||声明变量
- 其中的用例标签'的声明
- ES6/JavaScript-声明不带let/const的变量
- 如果我用 let 声明它,我是否需要删除 javascript 中的对象
- 引用错误,用于使用 let 检查延迟声明的变量
- AngularJS:块作用域声明(let、const、function、class)在严格模式之外还不支持
- 未捕获的SyntaxError:在严格模式之外还不支持块范围的声明(let、const、function、class)
- 是用let或const声明的变量