《你不知道的JavaScript-上卷》第一部分-附录B-笔记-块作用域的替代方案

43 阅读1分钟

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