React ES6 変数
1. 変数 (Variables)
ES6 以前は、変数(Variables)を定義する方法は var キーワードの 1 つだけでした。変数を定義しなかった場合、それらはグローバルオブジェクトに割り当てられていました。ただし、ストリクトモード(Strict mode)を使用している場合は、定義されていない変数を使用するとエラーになります。
現在、ES6 では var、let、const の 3 つの変数定義方法があります。
2. var
var x = 5.6;- 関数の外で
varを使用すると、それはグローバルスコープ(Global scope)に属します。 - 関数の中で
varを使用すると、その変数スコープはその関数内に限定されます。 - ブロック(例:
forループなど)の中でvarを使用しても、その変数はブロックの外側から引き続きアクセス可能です。
つまり、var は関数スコープ(Function scope)を持ち、ブロックスコープ(Block scope)を持ちません。
3. let
let x = 5.6;let は var のブロックスコープ版であり、定義されたブロック(または式)内に限定されます。
ブロック(例:for ループなど)の中で let を使用すると、その変数はそのループ内でのみ有効です。let はブロックスコープを持ちます。
4. const
const x = 5.6;const は、一度作成されると、その値を変更(再代入)することができない変数です。const も let と同様にブロックスコープを持ちます。
ただし、const というキーワードは少し誤解を招きやすい側面があります。これは「不変の値」を定義するのではなく、値への「不変の参照(Constant reference)」を定義するものです。
そのため、以下の操作はできません。
- 定数値の再代入
- 定数配列(Array)の再代入
- 定数オブジェクト(Object)の再代入
しかし、以下の操作は可能です。
- 定数配列の要素を変更する
- 定数オブジェクトのプロパティを変更する
4.1 コード例:const の挙動
// 配列の例
const cars = ["サアブ", "ボルボ", "BMW"];
// 要素の変更は可能
cars[0] = "トヨタ";
// 要素の追加も可能
cars.push("アウディ");
// しかし、配列自体の再代入は不可
// cars = ["トヨタ", "ボルボ", "BMW"]; // エラーになります