箭頭函數至關於匿名函數,它的寫法是:函數
x => x*x
它至關於this
fucntion (x){ return x*x; }
能夠看到,只有一條語句的箭頭函數省略了括號與return
。若是含有多條表達式,那麼就不能省略{}
與return
:rest
x => { if(x>0){ return x*x; }else{ return -x*x; } }
若是函數多個參數,那麼小括號()
也不能省略:code
// 兩個參數: (x, y) => x * x + y * y // 無參數: () => 3.14 // 可變參數: (x, y, ...rest) => { var i, sum = x + y; for (i=0; i<rest.length; i++) { sum += rest[i]; } return sum; }
若是要返回一個表達式的話,這樣寫會報錯:對象
x => {foo.x}
由於和函數體的{...}
有衝突,因此要改成:作用域
x => ({foo.x})
不使用箭頭函數的時候,在對象的方法中使用this須要使用hack寫法:get
var obj = { birth: 1990, getAge: function () { var _this = this; var fn = function () { return new Date().getFullYear() - _this.birth; // this指向window或undefined }; return fn(); } };
如今,箭頭函數徹底修復了this
的指向,this
老是指向詞法做用域,也就是外層調用者obj
:io
var obj = { birth: 1990, getAge: function () { var b = this.birth; // 1990 var fn = () => new Date().getFullYear() - this.birth; // this指向obj對象 return fn(); } }; obj.getAge(); // 25