はじめに
よく、const を使え、var は論外みたいな話を聞きますが
具体的に各宣言の特性を明確に説明できる人は意外と少ないのではないでしょうか。
というわけで、今回復習を兼ねてまとめて行きます。
各宣言の特性
以下の図を見れば、概要がわかると思います。
宣言 | var | let | const |
---|---|---|---|
再代入 | 可能 | 可能 | 不可 |
再宣言 | 可能 | 不可 | 不可 |
スコープ | 関数スコープ | ブロックスコープ | ブロックスコープ |
繰り返し構文 | 可能 | 可能 | 不可 |
詳細については以下で説明します。
var
ES 2015 で let と const が導入されるまでは、変数宣言の手段は var のみでした。
そのため、一昔前のコードを見ると、var が使われていることが多いです。
ですが現在ではほとんど使用されません。
var は古い構文のため、let や const で宣言された変数とは少し異なる特徴があります。
ブロックスコープに属さないという点です。
if (true) {
var hoge = "fuga";
}
console.log(hoge);
上記を実行すると...
fuga
ブロックスコープ外から呼ばれてしまいますね...
let
let はブロックスコープを持ち、再宣言ができません。
// 再宣言不可のため、エラーが発生します。
let hoge = "fuga";
let hoge = "piyo";
// 以下のような再代入は可能です。
let fuga = "fuga";
fuag = "piyo";
// ブロックスコープ
// 以下のコードはエラーが発生します。
if (true) {
let hoge = "fuga";
}
console.log(hoge);
const
再代入も再宣言でもできない、定数を宣言するものです。
// 再代入も不可能のため、エラーが発生します。
const hoge = "fuga";
hoge = "piyo";
ただ、オブジェクトの中身を変更することは可能です。
const author = {
name: "芥見下々",
age: 32,
};
author.name = "尾田 栄一郎";
author.age = 49;
console.log(author); //{ name: '尾田 栄一郎', age: 49 } が出力される
結論
-
var
は使わないで! - 再代入が必要な場合は
let
を使用しても OK - 再代入が不要な場合は、
const
を使用しましょう!
参照