es6之箭頭函數

箭頭函數的寫法:

箭頭函數相當於匿名函數,它的寫法是:

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
    原文作者:stray_bird_
    原文地址: https://segmentfault.com/a/1190000014741146
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞