ES6 箭頭函數

箭頭函數(Arrow Functions)

JavaScript中有一個有趣的特性,不管什麼時候,當你須要一個函數時,你均可以在想添加的地方輸入這個函數。es6

jQuery的.click()方法接受一個參數:一個函數。沒問題,你能夠在這裏輸入一個函數:編程

$("#confetti-btn").click(function (event) {
      playTrumpet();
      fireConfettiCannon();
    });

對 於如今的咱們來講,寫出這樣的代碼至關天然,而回憶起在這種編程方式流行以前,這種寫法相對陌生一些,許多語言中都沒有這種特性。1958年,Lisp首 先支持函數表達式,也支持調用lambda函數,而C++,Python、C#以及Java在隨後的多年中一直不支持這樣的特性。函數

// 六種語言中的簡單函數示例
    function (a) { return a > 0; } // JS
    [](int a) { return a > 0; }  // C++
    (lambda (a) (> a 0))  ;; Lisp
    lambda a: a > 0  # Python
    a => a > 0  // C#
    a -> a > 0  // Java

ES6中引入了一種編寫函數的新語法學習

// ES5
    var selected = allJobs.filter(function (job) {
      return job.isSelected();
    });
    // ES6
    var selected = allJobs.filter(job => job.isSelected());

當你只須要一個只有一個參數的簡單函數時,可使用新標準中的箭頭函數,它的語法很是簡單:標識符=>表達式。你無需輸入function和return,一些小括號、大括號以及分號也能夠省略。
若是要寫一個接受多重參數(也可能沒有參數,或者是不定參數、默認參數、參數解構)的函數,你須要用小括號包裹參數list。code

// ES5
    var total = values.reduce(function (a, b) {
      return a + b;
    }, 0);
    // ES6
    var total = values.reduce((a, b) => a + b, 0);

除表達式外,箭頭函數還能夠包含一個塊語句。對象

// ES5
    $("#confetti-btn").click(function (event) {
      playTrumpet();
      fireConfettiCannon();
    });

    //這是它們在ES6中看起來的樣子:
    // ES6
    $("#confetti-btn").click(event => {
      playTrumpet();
      fireConfettiCannon();
    });

當使用箭頭函數建立普通對象時,你老是須要將對象包裹在小括號裏。ip

// 爲與你玩耍的每個小狗建立一個新的空對象
    var chewToys = puppies.map(puppy => {});   // 這樣寫會報Bug!
    var chewToys = puppies.map(puppy => ({})); //

連接
學習ES6get

相關文章
相關標籤/搜索