var、let、const的区别
var
- var是es5语法,有变量提升,而let const是es6定义的语法,没有变量提升。
- var在全局作用域声明的变量会挂载在window对象上
- 一个变量可在同一作用域多次声明,后面的声明会覆盖前面的声明
- 在函数中使用var声明变量的时候,该变量是局部的。而如果在函数内不使用var,该变量是全局的
let
- 不存在变量提升,let声明变量前,该变量不能使用(暂时性死区)
- let命令所在的代码块内有效,在块级作用域内有效
- let不允许在相同作用域中重复声明,注意是相同作用域,不同作用域有重复声明不会报错
const
- const声明一个只读的变量,声明后,值就不能改变
- const必须初始化,会有暂时性死区。
- const并不是变量的值不能改动,而是变量指向的内存地址所保存的数据不得改动。比如我们定义一个对象,我们就可以修改对象里的属性值,但是不可以重写整个对象
- const在块级作用域内有效
JS 暂时性死区
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”