十五、ES6:var、let、const
-
相同:都可以声明变量
-
区别
var let const 变量提升 有 没有 没有 重复声明 可多次声明同变量 不可以重复声明 不可以重复声明 变量/常量 变量:可再次赋值 变量:可再次赋值 常量:不可再次赋值 作用域 无自身作用域 具备自身作用域 具备自身作用域
// 1. 变量提升
console.log(a,b,c) //undefined, error, error
var a = 10
let b = 1
const c = 2
// 2. 重复声明
var aa = 11
var aa = 13
console.log(a) //13
let bb = 22
let bb = 23
console.log(bb) //error
const cc = 33
const cc = 34
console.log(cc) //error
// 3. 常量/变量
var aaa = 1
aaa = 2
console.log(aaa) //2
let bbb = 3
bbb = 4
console.log(bbb) //4
const ccc = 5
ccc = 6
console.log(ccc) //error
❗常量注意点:引用类型内部是可以允许更改的
const obj = {a:1} obj = 'asd' //error obj.a = 2
// 4. 作用域
if (true) {
var a = '1'
let b = '2'
const c = '3'
}
console.log(a,b,c) // '1', error, error
考题1:let、const没有变量提升机制
console.log(str) //undefined
var str = 'hey'
console.log(num) //报错
let num = 10
考题2:let、const自身作用域问题
function demo(){
let n = 2
if (true) { let n = 1 } //let作用域生效
console.log(n) //2
}
考题3:用const声明引用数据类型内部数据可以更改
const arr = ['a','b','c']
arr[0] = 'aaaaa'
console.log(arr) //['aaaa','b','c'] -- 不会报错