JavaScript初心者が知ったvarとletによる宣言の違い

JavaScriptjavascript, 宣言


Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 86

Notice: Trying to access array offset on value of type bool in /var/www/html/wordpress/wp-content/plugins/internal-link-building-plugin/internal_link_building.php on line 105

業務の中でJavaScriptを使っていて、実装したい機能が完成したので、コードのレビューを出したところ指摘を受け、varの部分をletに変更するようにとコメントを貰いました。とりあえずその場では、varの部分を全てletに置き換えて済ませました。しかし、理屈を知らずに済ませてしまうことは良くないと思ったので、varとletの違いや使い分けを調べてみようと思いました。

varとletの違い

変数のスコープに大きな違いがあります。ブロックスコープと関数スコープがあります。グローバル変数とローカル変数です。
ECMAScript6以降からブロックスコープと関数スコープを区別して、変数の宣言ができるようになります。
ECMAScript6については、別の機会に調べて見ようと思います。JavaScriptのバージョンのような物として軽く認識しています。

  • var
    ブロックスコープの変数を宣言したい時に使う
    複数宣言をすることができる。
  • let
    関数スコープの変数を宣言したい時に使う
    二重に宣言することができない。

constも存在

letの他にconstも存在します。

違い

再代入ができるかどうか。
変更しない固定した値のものに関しては、constで記述するのが良いかと思います。

ECMAScript5以前

ECMAScript5以前では、ブロックスコープや関数スコープに関しては区別をせずに、変数定義は全てvarで行っていたようです。
また、ブロックスコープを定義するためには、即時関数を使います。

まとめ

これまで、何も知らずに、JavaScriptでの変数宣言と言ったら、varをつけるものだと覚えていたので、意味があり、また最近だとletを使って宣言することもできることを学びました。他の言語だと、変数宣言の場所によってグローバル変数かローカル変数を指定していたなと思いました。(C 言語とか)少しずつ疑問に思ったことを調べる習慣を付けて知識にしていきたいと思います。