javascript 中的块级作用域 - liuxiaofei2010S/special-column GitHub Wiki

综述:

javascript中含有三种作用域:全局作用域、函数作用域以及块级作用域。但是在ES5中块级作用域是不存在的,直到ES6中才引入块级作用域。

作用:

  1. 隐藏信息

    变量声明向下应该离得使用的地方越近越好,最大限度本地化

    最小授权,不会向上污染上层作用域

  2. 不需要开发者自己去检查代码是否用错变量

ES5:

在ES5中如果想使用块级作用域可以有以下方法:

  1. with关键字

    扩展作用域。不建议使用,容易导致bug和兼容性问题

  2. try/catch的catch分句

    ES3规定其创造块级作用域。将ES6转化为ES5代码中使用的块级作用域的代码就是try/catch

  3. IIFE即立即执行函数

    不是普适的,只能手动操作使用。如果将ES6中任意块级作用域代码转换为ES6的IIFE会出现问题,更改this、return、continue、break等含义

ES6:

  1. let关键字

    可以将变量绑定到所在的任意作用域中(通常是{...}内部)

  2. const关键字

    如上,隐式劫持了当前作用域

  3. function关键字

    使用function关键字在块级作用域中声明函数在ES5中是不可以的,在ES6中规定可以。与let、const相同,函数劫持本地作用域