es6之箭頭函數

箭頭函數的寫法:

箭頭函數至關於匿名函數,它的寫法是:函數

x => x*x

它至關於this

fucntion (x){
    return x*x;
}

能夠看到,只有一條語句的箭頭函數省略了括號與return。若是含有多條表達式,那麼就不能省略{}returnrest

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指向的修復

不使用箭頭函數的時候,在對象的方法中使用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老是指向詞法做用域,也就是外層調用者objio

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
相關文章
相關標籤/搜索