
JavaScript共包含三個(gè)部分:ECMAScript、DOM和BOM,而我們今天開始所要講的ES6的全稱就是ECMAScript6,它是2015年發(fā)布的ECMAScript標(biāo)準(zhǔn),故又被稱之為ECMAScript2015。而后每年都會(huì)更新一個(gè)新版本,并以該年份置于其后作為標(biāo)識(shí),而這些從2015年開始的ECMAScript版本都被統(tǒng)稱為ES6。
ES6相對(duì)之前版本增加了很多新的特性,但是也有很多都只是語(yǔ)法糖,也就是說實(shí)現(xiàn)功能和之前一樣,只是語(yǔ)法更簡(jiǎn)潔了而已(如箭頭函數(shù)、類)。這些新特性新語(yǔ)法給我們開發(fā)帶來了很多便利,提高了工作效率和降低了維護(hù)成本。遺憾的是,現(xiàn)代瀏覽器對(duì)ES6兼容參差不齊,所以導(dǎo)致很多人雖然想用但是不敢用。不過幸虧有了像Babel這樣優(yōu)秀的編譯工具,能將ES6語(yǔ)法編譯成現(xiàn)代瀏覽器能識(shí)別的ES6之前版本,這樣我們又可以輕松愉快地使用它了。
接下來,就讓我來為大家一步步地打開這扇通往ES6的大門吧!
一、let——變量聲明
在ES6之前,我們是使用var來聲明變量,那么我們就來簡(jiǎn)單說說var和let之間到底有什么區(qū)別。
1. 塊級(jí)作用域
①var聲明的變量不是塊級(jí)作用域,所以代碼塊之外能訪問代碼塊中的變量。
{ // 代碼塊
var a = 0; // 全局變量,外部可訪問
}
console.log(a); // 0
②let聲明的變量是塊級(jí)作用域,所以代碼塊之外無法訪問代碼塊中的變量。
{ // 代碼塊
let a = 0; // 局部變量,外部可訪問
}
console.log(a); // 報(bào)錯(cuò)
2. 暫時(shí)性死區(qū)
①var聲明的變量會(huì)進(jìn)行變量提升,也就是說,該變量聲明總會(huì)被提升到作用域最頂部。
{
a = 0;
var a;
}
console.log(a); // 0
變量a的作用域?yàn)槿?,故以上代碼其實(shí)相當(dāng)于下面代碼:
var a; // 變量提升
{
a = 0;
}
console.log(a); // 0
然后再看下面這個(gè)例子:
console.log(a); // undefined
{
a = 0;
var a;
}