原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_syntax_features.htmlhtml
ES6包含了不少萬衆期待的特性支持:git
裏面衆多的特性都是讓Javascript看起來更規範的好東西,可是大部分都沒有被普遍支持。咱們僅介紹其中已經至少被一種瀏覽器和node --harmony
下支持的。es6
在寫這篇文章的時候,有以下特性是較爲普遍支持的:github
對,就這麼多了。前三個是爲了解決變量聲明、定義的問題,而最後一個則影響最大。會在單獨篇幅中介紹。下文只介紹前三個特性。瀏覽器
var
is scoped to the nearest function block (or global if outside a function block)let
is scoped to the nearest enclosing block (or global if outside any block),不少文獻、書籍都建議將for循環的起始變量i
、len
等放置到函數做用於的頂部聲明,以免後續變量持續存在所形成的迷惑。app
function() { for(var i=0,len=5;i<len;i++) { //body } console.log(i,len);=> 5,5 }
這是由於ES5的Javascript的不支持塊級做用域,變量僅僅被限制到函數做用域內。編輯器
注意在node中,你須要同時加入--harmony
和--use-strict
來啓動,纔會支持let
。不然會報錯: SyntaxError: Illegal let declaration outside extended mode
。ide
在ES6內,能夠經過let來定義塊級做用域的變量:函數
function() { for(let i=0,len=5;i<len;i++) { //body } console.log(i,len) // throw Reference Error }
最後一個,函數定義的做用域問題:
function f() { console.log('I am outside!'); } (function () { if(false) { // What should happen with this redeclaration? function f() { console.log('I am inside!'); } } f(); }());
如上代碼,在ES5時代,每一個瀏覽器都會得出不一樣的結果。可是ES6中,函數定義只在塊級做用域內有效,結果很明確。
const關鍵字定義一個塊級做用域的常量變量。
const a = "You shall remain constant!"; // SyntaxError: Assignment to constant variable a = "I wanna be free!";
yield
後面有一連串有關Generator和Iterator的內容,會在另一片文章內詳細介紹: Javascript Generator。