Roy*_*mir 9 javascript let ecmascript-6
与传统的var声明变量不同,它们附加到整个封闭的函数作用域,无论它们出现在何处 - let声明都附加到块作用域,但在它们出现在块中之前不会初始化
所以:
console.log( a ); // undefined
console.log( b ); // ReferenceError!
var a;
let b;
Run Code Online (Sandbox Code Playgroud)
所以似乎这里没有应用吊装.
题
如果是这样,我如何安全地检查变量是否已被声明?
NB - 我看到的选项是try/catch,当然总是将let变量放在第一位.但我的问题仍然存在
这里似乎没有应用吊装.
不完全是.变量仍然覆盖整个范围,输入范围时就像vars 一样创建绑定.
但是你是对的,var与之相反,它undefined只是在let评估语句时才立即初始化.从范围顶部到那里的区域称为临时死区 - 标识符已绑定,但ReferenceError在使用时将始终抛出.
如何安全地检查变量是否已被声明?
你不能,就像你不能为vars 1.你无论如何都不需要这个.
1:让我们忽略全局变量2,它们在这里成为全局对象的属性.
2:var/ function/ function*-declared变量,我的意思是.词法绑定(let,const)确实不会成为全局属性.
小智 5
这将是最接近您正在寻找的内容:
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
}
Run Code Online (Sandbox Code Playgroud)
尽管如此,它的实用性还是值得商榷的。但是,如果我必须检查let'ed 变量,我会采用类似的方法。但是,请注意,您不能使用 安全地创建丢失的变量let,因为它被catch块包围。但它不会破坏代码。
| 归档时间: |
|
| 查看次数: |
2155 次 |
| 最近记录: |