ES6的出現(xiàn)邻储,無疑是給前段開發(fā)人員帶來新的surprise,它包含了一些很棒的新特性旧噪,可以更加簡單快捷的實現(xiàn)很多復雜的操作吨娜,提高我們前端開發(fā)人員的工作效率。在這里我就簡單敘述以下ES6的一些新的特性淘钟,相對于ES5(ECMAScript2015)來說你會很快的喜歡上ES6宦赠。下面是ES6的文檔,喜歡的同學可以去研究解析一下http://es6.ruanyifeng.com/#docs/intro
新特性
-
LET
let命令米母,用來聲明變量勾扭。它的語法類似于var,但是所聲明的變量铁瞒,只是在let命令所在的代碼塊內有效妙色。
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
上面代碼在代碼塊之中,分別是let和var聲明了兩個變量慧耍,然后在代碼塊之外調用這兩個變量身辨,結果let聲明的變量報錯,var聲明的變量返回了正確的值芍碧。這表明煌珊,let聲明的變量只在它所在的代碼塊有效。
小例子
for (let i = 0; i < 10; i++) {
}
console.log(i);
// ReferenceError: i is not defined
上面代碼中师枣,計數(shù)器i只在for循環(huán)體內有效怪瓶,在循環(huán)體外引用就會報錯。
下面的代碼如果使用var践美,最后輸出的就是10。
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10
上面代碼中找岖,變量i是var命令聲明的陨倡,在全局范圍內都有效,所喲全局只有一個變量i许布。每一次循環(huán)兴革,變量i的值都會發(fā)生改變,而循環(huán)內被賦給數(shù)組a的函數(shù)內部的console.log(i),里面的i指向的就是全局的i杂曲。也就是說庶艾,所有數(shù)組a的成員里面的i,指向的都是同一個i擎勘,導致運行輸出的是最后一輪的i的值咱揍,也就是10。
如果使用let棚饵,聲明的變量僅在塊級作用域內有效煤裙,最后輸出的是6。
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6
上面代碼中噪漾,變量i是let聲明的硼砰,當前的i值在本輪循環(huán)有效,所有每一次循環(huán)的i其實都是一個新的變量欣硼,所以最后輸出的是6.你可能會問题翰,如果每一輪循環(huán)的變量i都是重新聲明的,那它怎么知道上一輪循環(huán)的值诈胜,從而計算出本輪循環(huán)的值豹障?這是因為Javascript引擎內部會記住上一輪循環(huán)的值,初始化本輪的變量i時耘斩,就在上一輪循環(huán)的基礎上進行計算沼填。
另外,for循環(huán)還有一個特別之處括授,就是設置循環(huán)變量的那部分是一個父作用域坞笙,而循環(huán)體內部是一個單獨的子作用域。
for (let i = 0; i < 3; i++) {
let i = 'abc';
console.log(i);
}
// abc
// abc
// abc
上面帶把正確運行荚虚,輸出了3次abc薛夜。這表明函數(shù)內部的變量abc與循環(huán)變量abc不再同一個作用域,有各自單獨的作用域版述。
今日總結
ES6是一個新的語法結構梯澜,在這里你會跟我一起去學習總結ES6,ES6相對于ES5的確是有比較大的優(yōu)化渴析,必然是未來發(fā)展的趨勢晚伙,所以大家抓緊一起跟我學習ES6吧。
每天都會更新新的特性和總結哦~