JavaScriptを学んでいく中で、「変数を宣言する方法にはいくつか種類がある」ということに気づくでしょう。その代表的なものが、var、let、constです。それぞれの違いを理解し、適切な場面で使い分けることが、安定したコードを書くための第一歩です。今回はこれらの違いと、どのように使い分けるべきかについて解説します。
varの特徴
varは、JavaScriptの初期から使われている変数宣言方法ですが、いくつか問題点があります。まず、varには「関数スコープ」という特徴があります。これを簡単に説明すると、varで宣言された変数は、たとえブロック(ifやforなど)内であっても、関数全体で有効になってしまうのです。
例えば、以下のコードを見てみましょう。
function testVar() {
if (true) {
var x = 10;
}
console.log(x); // 10が表示される
}
if文の中でxを宣言していますが、関数内どこからでもxにアクセスできてしまいます。これが「関数スコープ」の問題点です。また、varで宣言した変数は再宣言が可能であるため、予期せぬバグの原因になることもあります。
そのため、varはあまり推奨されておらず、今ではletやconstが主流です。
letの特徴
letはES6(ECMAScript 2015)で導入され、varの問題を解決した変数宣言方法です。最大の特徴は「ブロックスコープ」を持っていることです。これにより、letで宣言した変数は、宣言したブロック内でのみ有効となり、外部からはアクセスできません。
以下のコードを見てみましょう。
function testLet() {
if (true) {
let y = 20;
console.log(y); // 20が表示される
}
console.log(y); // エラー: y is not defined
}
letを使うことで、変数が特定のブロック内でのみ有効になり、外部でアクセスできなくなります。これにより、意図しない変数の再利用や、変数が他の部分に影響を与えることを防げます。
また、letは再宣言ができないため、同じスコープ内での誤った宣言を防げます。varのような問題を避けられるため、letは汎用的な変数宣言に使うのに適しています。
constの特徴
constもES6で導入された変数宣言方法で、letと同様にブロックスコープを持っていますが、constにはさらに強い制約があります。constで宣言した変数は、再代入ができません。つまり、一度値を設定すると、その後は変更できなくなります。
例えば、以下のコードでは再代入ができません。
const z = 30;
z = 40; // エラー: Assignment to constant variable.
constは「定数」を宣言するための方法ですが、実際にはオブジェクトや配列の場合でも使えます。ただし、オブジェクトや配列の内容自体は変更できますが、参照(変数が指す場所)を変更することはできません。
const arr = [1, 2, 3];
arr.push(4); // これは有効
arr = [5, 6, 7]; // エラー: Assignment to constant variable.
constは変更しない値や定数を宣言したいときに使います。例えば、設定値や変更しないデータなどです。
使い分けのポイント
| 変数宣言 | 使い方 |
| var | なるべく使わない |
| let | 変数の値が変更されるとき |
| const | 変数の値が決して変更されないとき |
まとめ
varは古い方法で、スコープに関する問題が多いため、ほとんどの場合letやconstを使う方が安全です。letは値が変更される場合に、constは値が変更されない場合に使い分けると、より堅牢で読みやすいコードを書くことができます。どの宣言方法を使うかで、コードの可読性やバグの発生を大きく減らせるので、ぜひ適切に使い分けてみましょう。


コメント