块级作用域

block
字面意思,块级的作用域,每一块由 {} 框起来
在非严格模式下(non-strit mode),申明的函数和 var 申明的变量没有块级作用域
let 和 const 声明的变量有块级作用域

块级变量 let

let
var 声明的变量只能是全局或整个函数块的,let 声明的变量只在其申明的块或子块中可用
let 申明的变量在其定义被执行时才初始化

  1. console.log(x); // underfined
  2. console.log(y); // ReferenceError
  3. var x = 1;
  4. let y = 1;

let 不允许重复声明变量
在函数和方法的最顶端,var 会在全局对象里创建一个属性,而 let 不会

  1. var x = 'aa';
  2. let y = 'aa';
  3. console.log(this.x); // 'global'
  4. console.log(this.y); // underfined

块级常量 const

const
与 let 相同,不同为是常数,变量的值不可变(引用类型的地址不变)
常数变量声明通常使用大写字母
声明时必须初始化

  1. const Pai = 3.24
  2. Pai = 1; // Uncaught TypeError: Assignment to constant variable
  3. const FOO; // Uncaught SyntaxError: Missing initializer in const declaration