首先javascript與ECMAscript的關(guān)系是:前者是后者的規(guī)格(標(biāo)準(zhǔn))键畴,后者是前者的一種實(shí)現(xiàn)(另外的ECMAScript方言還有Jscript和ActionScript)疾棵。平常所說(shuō)的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ù)作用域,沒(méi)有塊級(jí)作用域吆倦。
在ES6中听诸,let為javascript新增了塊級(jí)作用域,用它聲明的變量只有在let命令所在的代碼塊才生效蚕泽。
let name = 'zach'
while (true) {
let name = 'obama'
console.log(name) //obama
break
}
console.log(name) //zach
除此之外晌梨,var帶來(lái)的不便還有循環(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è)疑問(wèn)须妻,關(guān)于如下兩個(gè)例子:
圖片.png
圖片.png
這結(jié)果真是出乎我的意料啊仔蝌,我本以為用let來(lái)定義,此時(shí)會(huì)輸出undefinded呢~~~~~~~~~~唔~~~~~~~~