【JavaScript】変数を定義する「var」「 let」「 const」 の違いとは?

JavaScriptで変数を定義する方法は現状3つある。

  • var
  • let
  • const

この3つの違いが正直あやふやだったので、整理していきたいと思う。

変数を定義する「var」「let」「const」とは?

JavaScriptでは変数を使いたい場合、「var」「let」「const」のどれかを使って変数名を宣言することが推奨されている。
※3つを使わないで変数を宣言することができるそうだが、バグのもとになるからやめた方が良いそうだ。

このようにJavaScriptでは変数名を宣言することで変数が使えるようになるのだが、その宣言をするために必要なのが「var」「let」「const」なのだ。

以前は変数名を宣言する方法は「var」しかなかったのだが、「var」の問題点を解決するためにECMAScript2015(現在のJavaScriptの標準仕様)から採用されたのが「let」と「const」だ。

要は、「let」と「const」はJavaScriptが2015年にアップデートされて新しく使えるようになった新機能とイメージするとわかりやすいと思う。

実務で便利にするために「let」と「const」が生み出されたわけだが、変数名を宣言する方法が3つになってしまったので、

「じゃどれで変数名を宣言すればいいわけ?」

と混乱しているプログラミング小僧のような初心者が増えているようだ。

スポンサーリンク

3つの違いは再定義・再代入・スコープの違い

では3つの違いは何かというと

  • 再宣言できるか?
  • 再代入は可能か?
  • 変数のスコープの範囲(使える範囲)はどこまでか?

の3つが関係してくる。

再宣言は可能か?

まずは再宣言が可能かどうかに違いがある。

再宣言って言うのは

というように一度宣言した変数名(今回はvar test;)を後でもう一度同じ名前で宣言することだ。

3つの中で再宣言が可能なのは「var」だけだ。

var let const の説明

正直、この再宣言は必要ない。

むしろ、何人かでプログラムを作成していた場合、自分がある箇所で使った変数名を別の人が気付かずに再宣言してしまってバグが起きるってリスクの方がある。

だからこそJavaScriptのアップデートで生み出された「let」と「const」は再宣言が不可能になっているのだろう。

先程のコードを「var」⇒「let」や「const」に変えたらエラーになる。

再代入は可能か?

次の違いは再代入が可能かどうかだ。

再代入というのは、

というように変数に値を代入した後に、後の方になってまた値を再代入して上書きすることだ。

今回の例だと変数testに

'これはテストです'

という値を代入した後に

’変数の値を変更しました。’

という値を再度代入している。

この変数に値を再度代入=「再代入」をすることが出来るかどうかというのも「var」「let」「const」の3つの違いの1つだ。

var let const の説明②

上図のように「var」と「let」は変数への値の再代入がOKだ。

それに対して「const」は再代入不可となる。

「let」と「const」の違いはここにあるのだ。

変数のスコープの範囲はどこまでか?

スコープ、、、

これを聞くだけでJavaScriptを勉強し始めた時は

「もうわからない、、、」

というほど苦手意識を持っていた(笑)

JavaScriptにおけるスコープっていうのは、変数がどの場所から参照できるのかを決めているものだ。

もうちょっとわかりやすくいうと「変数の有効範囲」といえる。

var let const の説明③

「var」は関数スコープといって、関数の中で宣言した変数はその関数内で使用可能(有効)ということだ。

一方で「let」と「const」はブロックスコープとなり、もっと変数の有効範囲が狭い。

ただ言葉での説明で理解するのはかなり難しいので図で考えた方が良いだろう。

というコードの場合、「var」だったら関数スコープといって関数の範囲内は変数の参照が可能だからエラーにならない。

関数スコープの説明

一方で「let」と「const」はブロックスコープだから、for文の{}外で変数iを参照するとエラーになる。

ブロックスコープの説明

そもそも「const」は変数への値の再代入が禁止されているから、iの値を1つずつ増やしていくこのfor文では、iの値をi++で増やそうとした時点でエラーになるのだ。

スポンサーリンク

今後は「let」と「const」を中心に使おう

このように

  • 再宣言
  • 再代入
  • 変数のスコープ(有効範囲)

この3つで「var」「let」「const」は違いがある。

では今後JavaScriptのコードを書く時はどれを使えばいいのか?

元々は「var」一択だったのが、アップデートされて「let」と「const」が出来た。

「var」だけで問題なければ、「let」と「const」を生み出す必要が無かったのだろうから、「var」は主流ではなくなっていくことは容易に予想できる。

それに「var」を使っていることで起きた問題を解決・改善するために「let」と「const」が生み出されたと考える方が自然だ。

ということは今後は「let」と「const」をメインで使っていくべきだと思われるし、プロのエンジニアの人もそう主張している人が多い。

「let」と「const」の違いは変数に値を再度代入できるか、できないかの違いだ。

その違いをしっかりと理解して、値を再度代入する必要がある変数を使う時は「let」。

値を再度代入する必要が無い変数は「const」を使うってのがいいのだろう。

関連記事はこちら!

【JavaScript】「i++」ってどういう意味?インクリメント演算子を理解する!

おすすめの記事