2016-08-10 71 views
2

目前我正在學習React和Redux。我找到了一個樣板文件,並且正在研究所有示例代碼。我的問題是我不完全明白這個ES6語法的含義。ES6的未知意義語法

我迄今瞭解到的情況是hello =() => "Hello";將相當於:

hello = function hello() { 
    return "Hello"; 
}; 

然後改變上述以hello = name => "Hello " + name;將其轉換爲:

hello = function hello(name) { 
    return "Hello " + name; 
}; 

這一切都非常有意義,基本上它只是縮短它,所以你不必編寫函數和它的return語句。然而,我遇到了一些我不能說服我的頭腦的語法。這是因爲如下:

const mapActionCreators = { 
    increment:() => increment(1), 
    doubleAsync 
} 

上面的代碼轉換爲:

var mapActionCreators = { 
    increment: function (_increment) { 
    function increment() { 
     return _increment.apply(this, arguments); 
    } 

    increment.toString = function() { 
     return _increment.toString(); 
    }; 

    return increment; 
    }(function() { 
    return increment(1); 
    }), 
    doubleAsync: doubleAsync 
}; 

我明白() => increment(1)在這種情況下被翻在地:

(function() { 
    return increment(1); 
}), 

總的來說,我想我的問題是,increment:如何轉換爲:

increment: function (_increment) { 
    function increment() { 
     return _increment.apply(this, arguments); 
    } 

    increment.toString = function() { 
     return _increment.toString(); 
    }; 

    return increment; 
} 

代碼是什麼意思?

回答

6

箭頭功能從他們在創建範圍捕捉this值。

apply讓你調用一個函數和明確的this在它的價值。

其餘代碼只是將正確的this提供給函數。

(和toString正在確保權利函數獲得字符串如果您嘗試將生成的函數字符串化)。