首先javascript與ECMAscript的關(guān)系是:前者是后者的規(guī)格(標(biāo)準(zhǔn)),后者是前者的一種實(shí)現(xiàn)(另外的ECMAScript方言還有Jscript和ActionScript)。平常所說的JavaScript實(shí)現(xiàn)是由ECMAScript和BOM ,DOM組成的。在日常場(chǎng)合,這兩個(gè)詞是可以互換的。
到這里,我們就知道為什么要學(xué)ES6 (ES2015)啦~關(guān)于ES6最常用的特性:
- let,
- const,
- class,
- extends,
- super,
- arrow functions,
- template string,
- destructuring,
- default,
- rest arguments
共計(jì)10個(gè)
唔~偷個(gè)懶(先掌握前兩個(gè)……)
let,const用法(聲明變量)
舉個(gè)栗子:
var name = 'zach'
while (true) {
var name = 'obama'
console.log(name) //obama
break
}
console.log(name) //obama
上述結(jié)果,內(nèi)層變量覆蓋外層變量,是因?yàn)樵贓S5中只有全局作用域和函數(shù)作用域,沒有塊級(jí)作用域。
在ES6中,let為javascript新增了塊級(jí)作用域,用它聲明的變量只有在let命令所在的代碼塊才生效。
let name = 'zach'
while (true) {
let name = 'obama'
console.log(name) //obama
break
}
console.log(name) //zach
除此之外,var帶來的不便還有循環(huán)計(jì)數(shù)的變量泄露為全局變量,如:
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10
對(duì)比之下
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6
其實(shí)有個(gè)疑問,關(guān)于如下兩個(gè)例子:

圖片.png

圖片.png
這結(jié)果真是出乎我的意料啊,我本以為用let來定義,此時(shí)會(huì)輸出undefinded呢~~~~~~~~~~唔~~~~~~~~