var、let、const之间的区别

var 、 let 、 const 三者区别可以围绕下⾯五点展开:•

变量提升

• var 声明的变量存在变量提升,即变量可以在声明之前调⽤,值为 undefined

let 和 const 不存在变量提升,即它们所声明的变量⼀定要在声明后使⽤,否则报错

1
2
3
4
5
6
7
8
9
// var
console.log(a) // undefined
var a = 10
// let
console.log(b) // Cannot access 'b' before initialization
let b = 10
// const
console.log(c) // Cannot access 'c' before initialization
const c = 10

暂时性死区

• var 不存在暂时性死区

let 和 const 存在暂时性死区,只有等到声明变量的那⼀⾏代码出现,才可以获取和使⽤该变量

块级作⽤域

var 不存在块级作⽤域let 和 const 存在块级作⽤域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1 // var
2 {
3 var a = 20
4 }
5 console.log(a) // 20
6 // let
7 {
8 let b = 20
9 }
10 console.log(b) // Uncaught ReferenceError: b is not defined
11 // const
12 {
13 const c = 20
14 }
15 console.log(c) // Uncaught ReferenceError: c is not defined

重复声明

• var 允许重复声明变量

let 和 const 在同⼀作⽤域不允许重复声明变量

修改声明的变量

1
2
3
4
5
6
7
8
9
1 // var
2 var a = 10
3 var a = 20 // 20
4 // let
5 let b = 10
6 let b = 20 // Identifier 'b' has already been declared
7 // const
8 const c = 10
9 const c = 20 // Identifier 'c' has already been declared

使⽤

var 和 let 可以

const 声明⼀个只读的常量。⼀旦声明,常量的值就不能改变

1
2
3
4
5
6
7
8
9
10
11
12
1 // var
2 var a = 10
3 a = 20
4 console.log(a) // 20
5 //let
6 let b = 10
7 b = 20
8 console.log(b) // 20
9 // const
10 const c = 10
11 c = 20
12 console.log(c) // Uncaught TypeError: Assignment to constant variable