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 => ({})); //