1.變量的聲明
ES6 新增了 let 命令寸癌,用來(lái)聲明變量粪糙。它的用法類似于 var,但是所聲明的變量夏跷,只在 let 命令所在的代碼塊內(nèi)有效。
1. 變量名不能重復(fù)
- let 聲明的變量明未,變量名不能重復(fù)! 而且必須先聲明后使用槽华。
- 換句話說(shuō),let 沒(méi)有變量的提升 和 變量的污染趟妥。
var a = 0;
let a = 1; // 報(bào)錯(cuò) --- 標(biāo)識(shí)符 'a' 已經(jīng)聲明
console.log(a);
2. 塊級(jí)作用域
- 塊級(jí)作用域猫态,相當(dāng)于局部作用域。
- 在JS中披摄,只有函數(shù)才能創(chuàng)造一個(gè)局部作用域亲雪,
- 但是在ES6中,只要是個(gè) { } 都是塊級(jí)作用域(局部作用域)疚膊。
// 對(duì)象:
{
var a = 1;
let b = 2;
}
console.log(a); // a = 1
console.log(b); // 報(bào)錯(cuò) --- b is not defined
// 在 js 中函數(shù)創(chuàng)造局部環(huán)境
for (var i = 0; i < 10; i++) {
var a = i;
}
console.log(i); // 10
console.log(a); // 9
// es6 中 用 let 在 for 中聲明的變量 义辕,無(wú)法在外部訪問(wèn)。
for (let i = 0; i < 10; i++) {
let a = i;
}
console.log(i); // i is not defined
console.log(a); // i is not defined
3. let 聲明的變量只能在當(dāng)前作用域使用
- js5 中 用 var 在 for 中聲明的變量寓盗,可以再外部訪問(wèn)灌砖。
- es6中 用 let 在 for 中聲明的變量 璧函,無(wú)法在外部訪問(wèn)。
- 在 js 中基显,全局變量可以在局部環(huán)境下使用蘸吓,局部變量不能在全局下使用。
- 在 es6 中撩幽,let 聲明的變量库继,全局變量只能在全局使用,局部變量只能在局部使用窜醉。
而且全局聲明的變量與局部聲明的變量沒(méi)有任何關(guān)系宪萄, 變量名都可以一樣。
let a = 0; // 全局作用域
{
// console.log(a); // 報(bào)錯(cuò) --- 在初始化之前無(wú)法訪問(wèn)'a' 應(yīng)該先聲明后使用酱虎。
let a = 1; // 局部作用域
console.log(a); // 1
{
let a = 2; // 局部作用域
console.log(a); // 2
}
}
console.log(a); // 0
4. 暫時(shí)性死區(qū)
- 如果區(qū)塊中存在 let 和 const 命令雨膨,這個(gè)區(qū)塊對(duì)這些命令聲明的變量,從一開(kāi)始就形成了封閉作用域读串。凡是在聲明之前就使用這些變量聊记,就會(huì)報(bào)錯(cuò)。
- 總之恢暖,在代碼塊內(nèi)排监,使用 let 命令聲明變量之前,該變量都是不可用的杰捂。這在語(yǔ)法上舆床,稱為“暫時(shí)性死區(qū)”
{
console.log(a); // 報(bào)錯(cuò) --- 在初始化之前無(wú)法訪問(wèn)'a' 應(yīng)該先聲明后使用。
let a = 1; // 局部作用域
console.log(a); // 1
2. const
1.const關(guān)鍵字
- 在ES6中用來(lái)聲明靜態(tài)常量嫁佳。
- 常量在聲明時(shí)挨队,所有字母必須大寫, 必須賦值。
- 一旦聲明蒿往,常量的值就不能改變盛垦。
const PI = 3.1415926;
console.log(PI);
PI = 0;
console.log(PI); // 報(bào)錯(cuò) --- 常量無(wú)法修改, 對(duì)常數(shù)變量的賦值。
const ABC;
console.log(ABC); // 報(bào)錯(cuò) --- 在const聲明中缺少初始化格
2. const 在作用域特性上與 let 完全一致
3. 總結(jié):
相同點(diǎn):
1. const 的作用域與 let 命令相同:只在聲明所在的塊級(jí)作用域內(nèi)有效瓤漏。
2. const 與 let 都 沒(méi)有提升和污染(變量 / 常量)腾夯。
3. const 與 let 都 存在暫時(shí)性死區(qū)。
4. const 與 let 都 只能在聲明的位置后面使用蔬充。
5. const 與 let 都 不可重復(fù)聲明蝶俱。
區(qū)別:
let => 變量:值可以改變。
const => 常量: 一旦聲明饥漫,變量值不可更改榨呆。