// 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