javascript 中的块级作用域 - liuxiaofei2010S/special-column GitHub Wiki
综述:
javascript中含有三种作用域:全局作用域、函数作用域以及块级作用域。但是在ES5中块级作用域是不存在的,直到ES6中才引入块级作用域。
作用:
-
隐藏信息
变量声明向下应该离得使用的地方越近越好,最大限度本地化
最小授权,不会向上污染上层作用域
-
不需要开发者自己去检查代码是否用错变量
ES5:
在ES5中如果想使用块级作用域可以有以下方法:
-
with关键字
扩展作用域。不建议使用,容易导致bug和兼容性问题
-
try/catch的catch分句
ES3规定其创造块级作用域。将ES6转化为ES5代码中使用的块级作用域的代码就是try/catch
-
IIFE即立即执行函数
不是普适的,只能手动操作使用。如果将ES6中任意块级作用域代码转换为ES6的IIFE会出现问题,更改this、return、continue、break等含义
ES6:
-
let关键字
可以将变量绑定到所在的任意作用域中(通常是{...}内部)
-
const关键字
如上,隐式劫持了当前作用域
-
function关键字
使用function关键字在块级作用域中声明函数在ES5中是不可以的,在ES6中规定可以。与let、const相同,函数劫持本地作用域