let和const命令
let
let命令與var類似钦铁,但是所聲明的的變量只能在let所在的代碼塊內(nèi)有效干旁,let不存在變量提升
- let的塊作用域
{
let a = 1;
var b = 2;
}
a //報錯, 離開了塊級作用域let所聲明的變量不可訪問
b //2
- let不存在變量提升
console.log(a) //報錯
console.log(b) //undefined var聲明的變量存在變量提升
let a = 1;
var b = 2;
- let的暫時性死區(qū)
var a = 1
if(true){
a = 'abc' //報錯捅儒,在 {}塊級作用域下變量a被let聲明啡莉,變量a不再受外部影響
let a;
}
- let用于for循環(huán)
for(let i = 0; i < arr.length; i++){}
塊級作用域
簡單理解的話就是ES6{}塊級作用域替代ES5的立即執(zhí)行函數(shù)(匿名函數(shù))
// 立即執(zhí)行函數(shù)的寫法
(function () {
...
...
}());
//塊級作用域的寫法
{
...
...
}
const
- const聲明的是常量逃默,聲明后立即初始化不可再次賦值改變攀圈。
const a;
a = 1
a //undefined
- 對于符合類型的如{},[]昭娩,const命令賦值的變量只是地址, 該地址的數(shù)據(jù)可以改變
const obj = {}
obj.a = 1;
obj.a //1 變量指向的地址的數(shù)據(jù)可以改變
obj = {} //報錯, 這里給變量重新賦值新的地址報錯
const arr = [];
arr.push(1); //給變量指向的地址添加數(shù)據(jù)
arr.length = 0; //給變量指向的地址更改屬性
arr = [1,2]; // 報錯 變量的地址不可指向其他地址
const的作用域與let命令相同:
1只在聲明所在的塊級作用域內(nèi)有效凛篙。
2const命令聲明的常量也是不提升,同樣存在暫時性死區(qū)栏渺,只能在聲明的位置后面使用呛梆。
3const聲明的常量,也與let一樣不可重復(fù)聲明磕诊。