Block area 块作用域
- 在 
ES5中规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。而在ES6中引入了块级作用域,允许函数可以在块级作用域中声明。块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。 - 通过
var声明的变量或者非严格模式下 (non-strict mode) 创建的函数声明没有块级作用域。 - 相比之下,使用 
let和const声明的变量是有块级作用域的。 - 示例:
 
 |  | 
x = 2仅限在定义它的块中,const的结果也是一样的。
- 一般考虑到兼容等问题,我们应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。
 - 示例: 上述代码使用函数表达式来写:
 
 |  | 
除此之外,还有一个地方我们需要注意一下, ES6 的块级作用域必须有大括号,如果没有大括号,JavaScript 引擎就认为不存在块级作用域。