【JavaScript】変数varは使わない方が良い理由【const・let】
今回はJavaScriptの変数型var
・let
・const
について、var
の使用が非推奨とされる理由について、各変数宣言の特徴や巻き上げなどの観点からまとめていきます。
JavaScriptの変数宣言の特徴
JavaScriptの変数宣言にはvar
・let
・const
の3種類があります。
それぞれの特徴について見てみましょう。
var | let | const | |
---|---|---|---|
再代入 | ○ | ○ | × |
再宣言 | ○ | × | × |
スコープ | 関数スコープ | ブロックスコープ | ブロックスコープ |
再代入
再代入とは宣言した変数に、再度値を代入することです。var
・let
は再代入が可能ですが、const
は不可能です。
ここで、const
は単なる再代入はできませんが、オブジェクト型の中身を変更することができます。
再宣言
再宣言とは、宣言した変数名を再度宣言し直すことです。var
は再宣言が可能ですが、let
・const
は不可能です。
スコープ
スコープとは関数を呼び出すことが出来る範囲のことです。var
のスコープは関数スコープであり、ある関数内で宣言した変数は、その関数のどこからでも呼び出すことができます。
対して、let
・const
のスコープはブロックスコープです。関数スコープと違い、関数内の記述位置でスコープから外れます。
変数の巻き上げについて
JavaScriptには変数の巻き上げという独特の特徴を有しています。関数内で宣言された変数は、関数の先頭で宣言したとみなされます。
上のコードではx
の宣言前にconsole.log
で記述していて、一見Test1
が出力される気がしますが、undefined
(未定義)が出力されます。これが変数の巻き上げで、上のコードは実行時には下のコードのように見なされます。
varの利用が非推奨な理由
上で述べた様に、var
は再宣言・再代入が可能であること、スコープの範囲が広いこと、巻き上げの特徴を持つことから、変数の値が意図しない影響を受けてしまう可能性があります。
上記のような仕様から、特に複雑なソースコードではvar
を使用を避けるべきであると言えます。
基本的には変数宣言にはconst
を使い、const
だけでは難しい場合にlet
を使うようにしましょう。例えばfor文
などは使うのはlet
ですね。
今回はJavaScriptの変数型についてまとめました。以上で記事を終わりにします。