es6声明变量的六种方法:
var,function,let,const, class, import
let:
- let有块级作用域
- let不存在变量提升(在声明之前不可使用)
- let有暂时性死区(只要在块级作用域中有使用let声明,所声明的变量就会绑定这个区域,不受外界的影响)
- let不允许重复声明
const:
- const是一个只读变量,一旦声明,其值不可改变
- const同样不存在变量提升,有暂时性的死区,不允许重复声明,只能在声明之后使用
const实际上保证的不是变量的值不可改变,而是变量所指向的内存地址不可改变
对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。
对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心
为什么需要块级作用域
1.内部变量可能会覆盖外层变量
2.用来计数的循环变量泄露为全局变量
网友评论