ES6 中引入了完整、不受约束的块作用域的能力,在ES6之前的版本中实现块作用域的效果的方法
使用catch
强制抛出错误,然后 catch 分句中的变量声明会接收到这个值,catch 分句具有块作用域,因此它可以在 ES6 之前的环境中作为块作用域的替代方案
- 工具可以将 ES6 的代码转换成能在 ES6 之前环境中运行的形式
try{throw 2;}catch(a){
console.log( a ); // 2
}
console.log( a ); // ReferenceError
Traceur
Google 维护的,用来将 ES6 代码转换成兼容 ES6 之前的环境
转换之后的代码样子
{
try {
throw undefined;
} catch (a) {
a = 2;
console.log( a );
}
}
console.log( a );
隐式和显式作用域
let 作用域或 let 声明
- 显式作用域,let 声明有意将变量声明放在块的顶部,
{
let a = 2;
console.log(a);
}
console.log(a);// ReferenceError