var
1.如果用var声明一个变量在函数内就只在函数内生效,
如果在函数外就变成了全局生效
2.如果在声明变量时省略var 的话
就会变成全局变量,如果全局变量中
已经有这个变量就会更新这个变量的值这就叫变量提升
注意:
1.var声明的变量存在提升,
2.注意只有变量声明才会提升,对变量赋值并不会提升
3.如果对没有声明的变量打印控制台会报错 没有声明
let
let声明的变量有几个特点
1.let声明的变量具有块级作用域
注意:此处可能扩展什么说块级作用域:简单来说就是外层无法获取到内层,即使外层和内层都使用相同变量名,也都各自不影响对方
2.let不存在变量提升,换一种说法,就是 let 声明存在暂时性死区
3.在同一个作用域下不能重复声明
注意::此处可能扩展什么是暂时性死区:
只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不受外部的影响。
const
const 声明方式,除了具有 let 的特点外,还有一个特点, const 的变量,一旦定义后,就不能修改,即 const 声明的为常量。
但是,并不是说 const 声明的变量其内部内容不可变
总结
1.var 声明的变量属于函数作用域,let 和 const 声明的变量属于块级作用域; 2.var 存在变量提升现象,而 let 和 const 没有此类现象; 3.var 变量可以重复声明,而在同一个块级作用域,let 变量不能重新声明,const 变量不能修改。