語法:express
([param] [, param]) => { statements } param => expression
使用:app
( )=>{···}; //零個參數用()表示 x =>{···}; //一個參數,能夠省略() (x,y)=>{···}; //多個參數不能省略() **多行語句須要用{}括起來,單行表達式不須要{},而且會做爲函數返回值。**
特性:函數
箭頭函數內部沒有constructor方法,也沒有prototype,因此不支持new操做。可是它對this的處理與通常的普通函數不同。箭頭函數的 this 始終指向函數定義時的 this,而非執行時。this
例如:prototype
var o = { x : 1, fn : function() { console.log(this.x) }, test : function() { setTimeout(function() { this.fn(); }, 100); } }; o.test(); // TypeError : this.fn is not a function
上面的代碼會出現錯誤,由於this的指向從o變爲了全局(函數調用中的this都是指向全局的)。code
要修改上面的代碼以下:對象
var o = { x : 1, fn : function() { console.log(this.x) }, test : function() { var _this = this; setTimeout(function() { _this.fn(); }, 100); } }; o.test();
經過使用外部事先保存的this就好了。作用域
利用到箭頭函數修改,箭頭函數的 this 始終指向函數定義時的 this,而非執行時。get
var o = { x : 1, fn : function() { console.log(this.x) }, test : function() { setTimeout(() => { this.fn() }, 100); } }; o.test();
這回this就指向o了。箭頭函數可讓setTimeout裏面的this,綁定定義時所在的做用域,而不是指向運行時所在的做用域。io
上面代碼中,轉換後的ES5版本清楚地說明了,箭頭函數裏面根本沒有本身的this,而是引用外層的this。
須要注意一點的就是箭頭函數中的this是不會改變指向對象的,咱們知道call和apply能夠改變this的指向,可是在箭頭函數中是無效的。
var x = 1, o = { x : 10, test : () => { console.log(this);//window函數調用中的this都是指向全局的 return this.x } }; console.log(o.test()); // 1 console.log(o.test.call(o)); // 依然是1
若是箭頭函數的代碼塊部分多於一條語句,就要使用大括號將它們括起來,而且使用return語句返回。
var sum = (num1, num2) => { return num1 + num2; }
因爲大括號被解釋爲代碼塊,因此若是箭頭函數直接返回一個對象,必須在對象外面加上括號。
var getTempItem = id => ({ id: id, name: "Temp" });
使用注意點