ES6語法特性 - ES6 - ECMAScript特性 - Javascript核心

原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_syntax_features.htmlhtml

源代碼: https://github.com/RobinQu/Programing-In-Javascript/blob/master/chapters/JavaScript_Core/ECMAScript/es6/es6_syntax_features.mdnode

  • 本文須要[補充][1]更多例子
  • 本文存在批註,但該網站的Markdown編輯器不支持,因此沒法正常展現,請到原文參考。

ES6語法特性

ES6包含了不少萬衆期待的特性支持:git

  • arrow functions
  • const
  • let
  • default function params
  • rest parameters
  • call(...)
  • array(...)
  • class
  • computed properties
  • modules
  • for...of
  • Array comprehensions
  • Generator comprehensions
  • Iterators
  • yield
  • Template Strings
  • block-level declaration
  • destructing
  • promoise

裏面衆多的特性都是讓Javascript看起來更規範的好東西,可是大部分都沒有被普遍支持。咱們僅介紹其中已經至少被一種瀏覽器和node --harmony下支持的。es6

在寫這篇文章的時候,有以下特性是較爲普遍支持的:github

  • let1
  • const2
  • Block-delvel declaration
  • for-of
  • yield

對,就這麼多了。前三個是爲了解決變量聲明、定義的問題,而最後一個則影響最大。會在單獨篇幅中介紹。下文只介紹前三個特性。瀏覽器

let和block-level declaration

  • 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循環的起始變量ilen等放置到函數做用於的頂部聲明,以免後續變量持續存在所形成的迷惑。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 modeide

在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關鍵字定義一個塊級做用域的常量變量。

const a = "You shall remain constant!";

// SyntaxError: Assignment to constant variable
a = "I wanna be free!";

yield

yield後面有一連串有關Generator和Iterator的內容,會在另一片文章內詳細介紹: Javascript Generator

相關文章
相關標籤/搜索