【JavaScript初心者必見】var, let, constの違いを丁寧に解説!!!
こんにちは!ニタマサ(@NewM07x2)です。
・JavaScriptの変数や定数の使い分けが微妙。。。
・var, let, constの違いが知りたい!
JavaScriptを扱っていると、こんな風に思ったことがあるかと思います。
自分もこの疑問にぶち当たったので、JavaScriptの変数の使い方をまとめました。
それでは始めていきましょう。
目次
var、let、constとは?
var、let、constとは全てJavaScriptで変数を宣言する際に使うキーワードです。
JavaScriptでは、変数や定数を使う際、変数名を宣言することが推奨されています。
たとえば、以下のように記述することで変数を宣言できます。
var text_var = ‘テストvar ’
let text_let = ‘テストlet ’
const text_con = ‘text_con’
“let”、”const”は新しい記法
let、constに関してはECMAScript2015から採用された比較的に新しい宣言方法のキーワードです。
※ECMAScript2015(エクマスクリプト) : JavaScriptの標準仕様
導入から約6年が経過しているので多くの開発現場で浸透している記法です。
また、国際団体で標準化されたうえでGoogle Chrome や Internet Explorer 11以降、ブラウザで広く採用されています。
“var, let”と”const”の違い
それでは3つの変数宣言の違いについてみていきます。
結論から言うと
「再代入可能か、否か」
です。
再代入とは一度宣言した変数に対し、値を再び代入することです。
例えば、“var”を用いた宣言の場合、
var text_var = ‘変数前’
text_var = ‘変数後’
となります。
こちらは”let”の場合でも、同様です。
“const”の時だけはvar,letとは異なり、再代入することができないのです。
もし、再代入しようとすると、エラーとなり実行することができません。
再代入を少なくすることは、予期せぬ不具合などの減少やコードが読みやすいといった利点があります。
そのため、再代入が必要な場合を除いて、できるだけconstを使いましょう。
“var”, “let” の違い
続いて、“var”, “let” の違いについてです。
こちらは大きく2点あります。
「再宣言」が可能か否か
1点目は「再宣言」が可能か否か です。
再宣言とは以下のように、同変数に対して変数宣言を再度行うことです。
●
var text_var = ‘変数前’
var text_var = ‘変数後’
✖︎
let text_var = ‘変数前’
let text_var = ‘変数後’
こちらは、”var”は再宣言が可能で、”let”はエラーとなってしまいます。
「スコープ」の違い
2点目は「スコープ」の違いです。
スコープとは変数の有効範囲のことです。
変数には以下のように2つの変数に分類されます。
- グローバル変数:コード全体
- ローカル変数:ブロック( if文, for文など )
こちらの観点で見てみると、“var”, “let”は以下に当てはまります。
- グローバル変数:var
- ローカル変数:let ( const )
例えば、varで変数宣言すると以下のようになります。
function test() {
if (true) {
//条件式の中で宣言
var AAA = 1;
}
console.log(AAA)
}
let(const)で変数宣言すると以下のようになります。
※ブロック外になるので、undefined(未定義)と出力されます。
function test() {
if (true) {
//条件式の中で宣言
let BBB = 1;
const CCC = ‘test’
}
console.log(BBB)
console.log(CCC)
}
狭いスコープではその変数の使われ方が明確になり、バグを起こしづらいコードを記述可能です。
そのため、グローバル変数は極力減らしたコードにしたほうが良さげです。
変数宣言を行う際に利用する優先順位は以下が良いですね。
const > let > var
まとめ
いかがだったでしょうか。
今回は『var, let, constの違い』について解説してきました。
大きな違いは再代入・再宣言ができるかどうか、スコープの違いの部分です。
変数宣言を行う際に利用する優先順位は
const > let > var
として方が、予期せぬバグが発生しづらいコードになるので、ぜひ実践してみてください。
もし、この記事に関して分からない事や質問がある場合は、お問い合わせページまたはTwitterのDMまで連絡を頂ければと思います!!!
(ついでにフォローしていただけると最高に嬉しいです笑)
では!See you again!(´∀`)
こんにちは!ニタマサ(@NewM07x2)です。