1、var:变量提升 并赋值为 undefined; 全局污染
2、let:变量提升 并处于暂存死区状态, 无法使用,会报错 Cannot access 'xxx' before initialization
配合{} 可以实现 块级作用域,块级作用域特征,在全局声明的变量,将会存储在独立的Script空间中,与window对象同级别,需要通过断点方式才能查看
不能在用一个作用域中,重复声明同名变量
3、const: 常量, 声明时必须同时赋值, 后期无法修改
不可更改 指的是 不可重新赋值, 但是 如果值是对象类型, 可以修改对象类型中的值
对象类型特殊,obj存储的是对象的地址,不能把obj存储的地址改成其他的,但是可以修改对象的内容
a = {name:'ddd'}
a = {age:222} //不可以
a.age = 444 //可以
4、let 和 var 的差别:
let是ES6中提供的,代替var的变量声明方式 var的缺点:变量提升+var声明的变量都会存储在window中,造成全局污染 let 没有全局污染,声明的变量存储在一个与window同级别的脚本区域,专门存储自定义变量 |
5、var、let、const三者的区别?
1、var声明的变量,存在变量提升,允许重复声明,只有在函数内声明才是局部变量,不存在块级作用域 2、let声明的变量,不存在变量提升,不允许重复声明 3、const声明的常量,声明后必须赋值,不允许重新赋值 4、let、const在函数中和块级作用域下都是局部的,存在块级作用域 5、let、const在全局作用域下声明的也不是全局的 6、var在全局作用域声明的是全局变量 |