箭頭函數的寫法:
箭頭函數相當於匿名函數,它的寫法是:
x => x*x
它相當於
fucntion (x){
return x*x;
}
能夠看到,只要一條語句的箭頭函數省略了括號與return
。假如含有多條表達式,那末就不能省略{}
與return
:
x => {
if(x>0){
return x*x;
}else{
return -x*x;
}
}
假如函數多個參數,那末小括號()
也不能省略:
// 兩個參數:
(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指向的修復
不運用箭頭函數的時刻,在對象的要領中運用this須要運用hack寫法:
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
:
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