JavaScriptを学び始めると必ず出てくるのが「変数宣言」の壁です。
特に「let」「var」「const」という3つのキーワードは、一見似ているようで実は使い方やルールが大きく異なります。
「どれを使えばいいの?」「何が違うの?」と悩んだ経験がある方も多いのではないでしょうか。
本記事では、それぞれのキーワードの特徴や違い、具体的な使い分け方を分かりやすく整理しました。
さらに初心者がつまずきやすい疑問にも丁寧に回答し、明日から実践できるシンプルなベストプラクティスを紹介します。
この記事を読めば、変数宣言の選び方に迷わなくなり、より安全で読みやすいコードが書けるようになります。
JavaScriptの変数宣言「let」「var」「const」とは?
まずは、JavaScriptで変数を宣言するときに登場する「let」「var」「const」がどんな役割を持つのかを整理しましょう。
これらはすべて「変数を宣言するためのキーワード」ですが、振る舞いや使いどころに違いがあります。
この章では「変数」と「変数宣言」の基本を理解し、次章の違い解説に備えるのがゴールです。
そもそも変数とは何か?
変数とは、プログラムの中でデータを一時的に保存しておくための「箱」のような存在です。
たとえば、ユーザーが入力した名前や計算結果を保存するときに、この箱を使います。
このイメージを押さえておくと、以降の理解がぐっと楽になります。
例 | 説明 |
---|---|
let fruit = “banana”; | 「fruit」という箱に「banana」という文字列を入れる |
const TAX = 0.1; | 「TAX」という箱に消費税率を入れる。変わらない前提 |
なぜ変数宣言が必要なのか
プログラムに「これからこの名前の箱を使います」と宣言することで、コンピュータは正しくデータを扱えるようになります。
宣言をせずに変数を使うと、予期せぬ動作やバグの原因になるため注意が必要です。
必ず「宣言」してから値を代入する習慣をつけましょう。
状態 | コード例 | 説明 |
---|---|---|
宣言のみ | let name; | 空の箱を用意した状態 |
代入 | name = “Taro”; | 箱に値を入れる |
初期化 | let name = “Taro”; | 宣言と同時に値を入れる |
「let」「var」「const」の違いを整理しよう
ここからは、3つのキーワードの違いを具体的に整理します。
特に「再宣言・再代入の可否」「スコープ(変数の有効範囲)」「ホスティングの挙動」の3点を理解すると、迷わず使い分けられるようになります。
違いを一覧で把握しておくことが、バグを防ぐ第一歩です。
再宣言・再代入の可否
「再宣言」とは同じ名前で変数をもう一度宣言すること、「再代入」とは既存の変数に新しい値を入れ直すことです。
どのキーワードを選ぶかによって、この挙動が変わります。
キーワード | 再宣言 | 再代入 |
---|---|---|
var | 可能 | 可能 |
let | 不可 | 可能 |
const | 不可 | 不可 |
スコープ(有効範囲)の違い
スコープとは「変数を使える範囲」のことです。
これを理解しないと、意図しない場所で値が上書きされるなどのバグが発生します。
キーワード | スコープの種類 | 特徴 |
---|---|---|
var | 関数スコープ | 関数全体で有効。ブロックの外でも参照できてしまう |
let | ブロックスコープ | 波カッコ{}の中だけで有効 |
const | ブロックスコープ | 波カッコ{}の中だけで有効。変更不可 |
ホスティングの挙動の違い
JavaScriptでは、変数宣言がプログラム実行前にコードの先頭へと「巻き上げ」られる動作があります。
これをホスティングと呼びますが、キーワードごとに挙動が異なります。
キーワード | ホスティング後の状態 |
---|---|
var | 宣言は巻き上げられるが、値は未定義(undefined) |
let / const | エラー(ReferenceError)になる |
具体的な使い分けの基本ルール
「let」「var」「const」の違いを理解したところで、実際にどう使い分ければいいのかを見ていきましょう。
ここでは、迷ったときに役立つ基本ルールを紹介します。
結論から言うと「constを優先し、必要な場合だけletを使う、varは使わない」が黄金ルールです。
constを優先すべき理由
まず考えるべきは「constで宣言できるかどうか」です。
constで宣言すると値の変更ができないため、コードの意図が明確になり、バグを防ぎやすくなります。
不変の値(固定値)を扱うときは必ずconstを使いましょう。
用途 | 例 |
---|---|
定数(固定値) | const TAX_RATE = 0.1; |
設定値 | const API_URL = “https://example.com/api”; |
letを使うべきケース
一方、値を後から変更する必要がある場合はletを使います。
特にループやカウンターのように、値が増減していく場面ではletが活躍します。
用途 | 例 |
---|---|
ループ処理 | for (let i = 0; i < 5; i++) { console.log(i); } |
一時的に値を保持 | let total = 0; |
varが非推奨とされる理由
varは古い書き方で、スコープやホスティングの挙動が直感的ではありません。
意図しない動作につながるリスクが高いため、新しく書くコードでは避けるべきです。
ただし、古い教材や既存コードには頻出するので理解は必須です。
特徴 | 注意点 |
---|---|
関数スコープ | ブロック外からアクセスできてしまう |
ホスティング | undefinedが入るためバグの原因になりやすい |
よくある疑問とその答え
実際にコードを書いていると、細かい疑問が出てきますよね。
ここでは初心者が特に悩みやすい質問をまとめて解説します。
疑問を一つひとつ解消しておくと、安心して変数宣言を選べるようになります。
変数は宣言しなくても使える?
技術的には可能ですが、宣言しない変数は自動的にグローバル変数として扱われます。
これにより予期せぬ影響が出るため、必ず宣言してから使いましょう。
書き方 | 結果 |
---|---|
value = 10; | グローバル変数として扱われる(危険) |
let value = 10; | ローカル変数として安全に扱える |
letは避けるべきなの?
いいえ、そんなことはありません。
letは値を変更する必要がある場面で積極的に使うべきです。
ただし「変更不要な変数」にまで使うと意図が不明確になるので、その場合はconstを選びましょう。
ケース | 推奨されるキーワード |
---|---|
固定値 | const |
カウンター | let |
varは本当に使わなくていいの?
新規コードでは使う必要はありません。
ただし、古いライブラリや教材ではvarで書かれていることが多いため、読めるように理解しておく必要はあります。
「書く」ためではなく「読む」ために知識を残しておくのがポイントです。
場面 | 対応 |
---|---|
新規開発 | varは使わず、let/constを選ぶ |
古いコードの改修 | varの挙動を理解した上で修正に対応する |
まとめ|変数宣言のベストプラクティス
ここまで「let」「var」「const」の違いや使い分け方を解説してきました。
最後に重要なポイントを整理し、明日から実践できる形にまとめましょう。
シンプルなルールを守るだけで、変数宣言の迷いはほとんど解消できます。
この記事で紹介したポイントの総復習
まずはおさらいとして、3つのキーワードの特徴をもう一度まとめておきます。
キーワード | 再宣言 | 再代入 | スコープ | 推奨度 |
---|---|---|---|---|
var | 可能 | 可能 | 関数スコープ | 非推奨 |
let | 不可 | 可能 | ブロックスコープ | 条件付きで使用 |
const | 不可 | 不可 | ブロックスコープ | 最優先 |
基本方針:「const」を第一候補にし、必要なときだけ「let」を使う。
明日から実践できる変数宣言のルール
具体的なルールを3つに絞ると、とてもシンプルです。
- const … 値が変わらない変数(固定値、設定値)に使う
- let … 値が変化する可能性のある変数に使う
- var … 新しいコードでは使わない(古いコードを読むために理解だけ残す)
このルールを意識するだけで、コードの可読性が向上し、バグの発生率も大幅に減らせます。
特に「なんとなくletを使っている」という状態から脱却することが大切です。
シーン | 適切な選択 |
---|---|
定数を定義 | const |
ループカウンター | let |
古い教材の学習 | var(理解用) |