JavaScript: varとletの違い(トップレベルでの変数宣言時)
JavaScriptの変数宣言にはvarとletがあります。
varは関数という単位でスコープが決まり、
letはブロックという単位でスコープが決まります。
では、関数内でもブロック内でもなく、
トップレベルで宣言した場合はどうなるのでしょうか?
ここではトップレベルでvarとletを使って変数を宣言した場合、
どのように違うのかを見てみます。
使用するJavaScriptファイルは2つです。
HTML
<script src="sample1.js"></script> <script src="sample2.js"></script>
次のように3つの変数(a, b, c)を「sample1.js」のトップレベルで宣言し、 それぞれの変数を2つのJavaScriptファイルから参照してみます。
- 変数a: var宣言
- 変数b: 宣言なし
- 変数c: let宣言
sample1.js
var a = "var宣言" b = "宣言なし" let c = "let宣言" console.log(a); // var宣言 console.log(b); // 宣言なし console.log(c); // let宣言
当然ですが、「sample1.js」からはそれぞれの変数を参照することができます。
では次に、 別ファイルの「sample2.js」から3つの変数を参照してみます。
sample2.js
console.log(a); // var宣言 console.log(b); // 宣言なし console.log(c); // let宣言 console.log(window.a); // var宣言 console.log(window.b); // 宣言なし console.log(window.c); // undefined
ポイントは最後の「window.c」が「undefined」になっている所です。
トップレベルで let宣言した変数は、 他のファイル「sample2.js」から参照することはできますが、 グローバルオブジェクトのプロパティ「window.c」としては参照できません。 この点がvar宣言とlet宣言の違いの1つです。
このような違いがあるため、意図的にwindowオブジェクトのプロパティとして グローバル変数を作成したい場合は、varで宣言する必要があります。 そうでなければ let で十分です。