let,const,var的区别
-
let
-
let不存在变量提升
使用let声明变量,必须遵循“先声明,后使用”的原则。否则报错。但如果是var声明的变量,则不会报错。
-
let声明的变量,存在块级作用域
let声明的变量只在所在声明的代码块有效。块级作用域由{}包括,if语句和for语句里面的{}也属于块级作用域
-
let不允许在同一作用域里进行重复声明同一个变量
在同一个作用域里,如果使用var进行声明变量,后面会覆盖前面的 。
-
暂时性死区(TDZ)
- 在代码块内,使用let声明变量之前,该变量都是不可以使用的只要在同一个作用域内存在let命令,它所声明的变量就”绑定”在这个作用域内,不管外部有没有声明。
- 暂时性死区的本质就是,只要一进入当前作用域,所使用的变量就已存在,但是不可获取,只有等到声明变量的哪一行代码的出现,在可以获取和使用该变量。
let b = 1; function test() { console.log(b); //1 let a = 2; } test()
let b = 1; function test() { console.log(b); //not defined let b = 2; } test() /*说明:由于存在全局变量b,但是块级作用域内let又声明了一个局部变量b,同一个作用域内,不能重复声明同一个变量,所以在let声明前,对b进行赋值则报错*/
-
-
const
const
声明一个只读的常量。一旦声明,常量的值就不能改变。const
一旦声明变量,就必须立即初始化,不能留到以后赋值。对于const
来说,只声明不赋值,就会报错const
命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
-
var
- 变量提升(无论声明在何处,都会被提至其所在作用于的顶部)
var
声明的变量会挂载在window上,而let
和const
声明的变量不会