ES6令人激動的特性

jopen 9年前發布 | 11K 次閱讀 ES6

 

Nick JusticeGitHub開發者計劃 的一員。早在ES6語言標準發布之前,他就借助像Babel這樣的轉譯器以及最新版本的瀏覽器在自己的項目中使用ES6特性。他認為,ES6的新特性將極大地改變JavaScript的編寫方式。近日,他在一篇 博文 中介紹了多項令人激動的特性:

Promises:對于JavaScript而言, promises 不是什么新東西,許多庫都提供了這一特性。但現在,它正式成為ES6語言標準的一部分。 這里 有一個使用ES6 Promises處理AJAX請求的例子,從中可以一窺其工作方式。

塊作用域:一般來說,JavaScript的作用域是“基于函數”的。就是說,為了包含一個私有變量,開發者必須聲明一個函數。這點一直為許多使用過它語言的開發者所詬病。但現在,ES6提供了關鍵字 let ,使開發者可以聲明塊級變量,下面是一個例子:

function foo() {
  let bar = true;

  if (bar) {
    var baz = 'hi!';
  }

  console.log(baz); // hi
}

foo();

function foo2() {
  let bar = true;

  if (bar) {
    let baz = 'hi';
  }

  console.log(baz); // Uncaught ReferenceError: baz未定義
}

foo2();

箭頭函數:這是ES6中最令Nick激動的特性之一。 => 不只是關鍵字 function 的簡寫,它還帶來了其它好處。箭頭函數與包圍它的代碼共享同一個 this 。有經驗的JavaScript開發者都熟悉諸如 var self = this;var that = this 這種引用外圍 this 的模式。但借助 => ,就不需要這種模式了。

Generators:這是一種新型的JavaScript函數,使開發者可以暫掛他們的函數,并在多次執行中返回不同的值。關于該特性的詳細信息,請閱讀Nick先前寫過的一篇 文章 及查閱 MDN 。這可能是最令Nick激動的特性。

Import(模塊):在ES6語言標準正式發布之前,Nick及其團隊就已經借助諸如 Require.js 和Browserify這樣的框架在項目中使用模塊加載。現在,ES6語言本身就提供了模塊定義,語法如下:

// myModule.js
export function myModule(someArg) {
  return someArg;
}

// main.js
import {myModule} from 'myModule';

myModule('foo'); // 'foo'

除了基本語法外,開發者還可以在一個模塊中多次 export 以及 import 整個模塊作為一個特定的命名空間。然后,就可以通過新命名空間調用模塊中的每個方法:

// myModule.js
export var foo = 'foo';
export var bar = 'bar';

// main.js
import * as baz from 'myModule';

baz.foo; // 'foo'
baz.bar // 'bar'

類:ES6的類存在一些爭議,主要是因為其實現沒有采用傳統的繼承方式。這意味著,新的 class 關鍵字更多的只是位于傳統的原型繼承之上的語法糖。關于JavaScript的原型繼承,請查看 這里這里 。關于ES6類的實例,請查看 這里

優化了“尾調用(Tail Calls)”:一直到ES5,函數遞歸調用過多會導致棧溢出(到達內存上限),這是因為函數每次調用自己時都會調用一個新版本。但優化之后,每次調用會同上次調用共享同一個上下文,保證了內存使用率的穩定。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!