阮一峰老师开源做品。javascript
书上的示例代码能够经过 在线网站代码调试工具 JS Bin 调试。html
每一个变量或函数经过执行环境 (execution context) 定义了其有权访问的其余数据,决定了他们各自的行为;java
全局执行环境是最顶层的执行环境,根据宿主环境的不一样,表示全局执行环境的对象也不一样:在浏览器中为 window 或 self 对象,在 Node.js 中为 global;es6
每一个执行环境都有一个与之相关联的变量对象 (variable object) ,存储了改环境中定义的全部变量和函数;浏览器
做用域(scope chain) 存储了与当前执行环境相关的全部变量对象,第一个为当前执行环境关联的变量对象,而后是包含环境的变量对象,直至全局执行环境的变量对象,即全局执行环境;函数
在代码中查找变量的值称为变量解析(variable name resolution),查找顺序是沿做用域链一级一级向外搜索;工具
ES5 规定函数只能在顶层做用域和函数做用域之中声明,不能在块级做用域声明,但浏览器为兼容旧代码,仍容许在块级做用域中声明;网站
ES6 明确容许函数在块级做用域声明,但应尽可能使用函数表达式形式,以下:调试
let f = function () { return a; };
只在它所在的代码块有效;code
只能先声明后使用,不存在变量提高;
在其声明所在的代码块,不受外部影响,造成暂时性死区;
不能重复声明;