块级作用域
block
字面意思,块级的作用域,每一块由 {}
框起来
在非严格模式下(non-strit mode),申明的函数和 var 申明的变量没有块级作用域
let 和 const 声明的变量有块级作用域
块级变量 let
let
var 声明的变量只能是全局或整个函数块的,let 声明的变量只在其申明的块或子块中可用
let 申明的变量在其定义被执行时才初始化
console.log(x); // underfined
console.log(y); // ReferenceError
var x = 1;
let y = 1;
let 不允许重复声明变量
在函数和方法的最顶端,var 会在全局对象里创建一个属性,而 let 不会
var x = 'aa';
let y = 'aa';
console.log(this.x); // 'global'
console.log(this.y); // underfined
块级常量 const
const
与 let 相同,不同为是常数,变量的值不可变(引用类型的地址不变)
常数变量声明通常使用大写字母
声明时必须初始化
const Pai = 3.24;
Pai = 1; // Uncaught TypeError: Assignment to constant variable
const FOO; // Uncaught SyntaxError: Missing initializer in const declaration