まずはexportなしの場合を考えてください。
関数宣言の書き方
JavaScript
1function updateMessages(messages) {
2 return {
3 type: UPDATE_MESSAGES,
4 messages
5 };
6}
は関数式にvarの変数に代入する書き方
JavaScript
1var updateMessages = function(messages) {
2 return {
3 type: UPDATE_MESSAGES,
4 messages
5 };
6};
とほぼ同じです(違いは変数の初期値代入が巻き上げられないぐらい)。両方とも関数スコープ(またはグローバルスコープ)であり、updateMessagesに別の何かを再代入することが可能です。これをES6以降のconst
を使って
JavaScript
1const updateMessages = function(messages) {
2 return {
3 type: UPDATE_MESSAGES,
4 messages
5 };
6};
とすると、ブロックスコープになり再代入が禁止されます。さら、関数式をアロー関数(=>の書き方のこと)で書き換えると、今回はthis
を使っていないので、そのまま書き換えられますので、
JavaScript
1const updateMessages = (messages) => {
2 return {
3 type: UPDATE_MESSAGES,
4 messages
5 };
6};
とできます。もし、this
が含まれている場合は、動作が異なってくることに注意して下さい。さらに、アロー関数では、内容がreturn文のみの場合は、return文を省略できるので、
JavaScript
1const updateMessages = (messages) => ({
2 type: UPDATE_MESSAGES,
3 messages
4});
とできます。なお、()で囲っているのは、{}で始まるとObjectリテラルではなくブロックと見なされてしまうのを防ぐためです。
これらは、関数宣言や変数宣言であり、export
をつけると、それぞれの名前でexport
できます。それぞれの差異は、export
を付けなかったときと同じです。ただ、スコープの範囲や再代入できるかどうかということについては、コードが書かれたファイル内(exportが書いているファイル内)でしか意味を持たず、importしているファイル内ではimportの識別子がファイルスコープであり読み取り専用になるため、もともとがvarかconstかの違いは無くなるでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/25 01:20