定義一個箭頭函數很簡單,基本語法是:express
([param] [, param]) => { statements } param => expression
param 是參數,根據參數個數不一樣,分這幾種狀況:
() => { ... } // 零個參數用 () 表示;
x => { ... } // 一個參數能夠省略 ();
(x, y) => { ... } // 多參數不能省略 ();
固然,和普通函數同樣,箭頭函數也能夠使用 ES6 新增的「默認參數」和「剩餘參數」( Firefox15+ 開始支持):函數
var func1 = (x = 1, y = 2) => x + y; func1(); // 獲得 3 var func2 = (x, ...args) => { console.log(args) }; func2(1,2,3); // 輸出 [2, 3]
箭頭函數容許多行語句或者單行表達式做爲函數體。多行語句要用 {} 括起來;單行表達式不須要 {},而且會做爲函數返回值:this
x => { return x * x }; // 函數返回 x * x x => x * x; // 同上一行 x => return x * x; // SyntaxError 報錯,不能省略 {} x => { x * x }; // 合法,沒有定義返回值,返回 undefined
箭頭函數也是 JS 函數的一種,因此以前的 instanceof 和 typeof 依然可用:prototype
var func1 = () => {}; func1 instanceof Function; // true var func2 = () => {}; typeof func2; // "function"
箭頭函數內部沒有 constructor 方法,也沒有 prototype,因此不支持 new 操做。new (() => {}) 會觸發 TypeError 報錯。指針
new (() => {}) // Uncaught TypeError: () => {} is not a constructor(…)
箭頭函數沒有本身內部的 this 指針。在箭頭函數中, this 指針是繼承於其所在的做用域。(我的理解爲箭頭函數不具有函數做用域,至關於表達式,this即爲箭頭函數被調用時外層的this)code
var a = 1; var test = { a: 100, c: function(){ console.log(this.a); }, d: ()=>{console.log(this.a)} } test.c();//100 test.d();//1