変数を宣言する方法について検証
変数の宣言について、繰り返して宣言した場合の動きを試します。
次のようなコードを書きます。
var test = 10; var test = 20; console.log(test);
この場合、特にエラーにならずに処理されます。
コンソールログへは20が出力されます。
次に、varで宣言されていない変数を呼び出してみます。
var test = 30; var test = 40; console.log(test2);
この場合は「ReferenceError: test2 is not defined」というエラーになります。
宣言されていない変数に対して、変数の呼び出しはNGです。
では、次のような、変数宣言をしていない変数に代入する場合を試してみます。
var test = 30; var test = 40; test3 = 50; console.log(test3);
この場合、上記のコードのみでしたら、エラーにはなりません。
変数test3への代入は問題なく行われ、コンソールログには50が出力されます。
strict modeについて
また、javascriptにはstrict modeと呼ばれる、実行形態があります。
strict modeはECMAScript2015で導入されて、javascriptを実行するブラウザに厳密な解釈をさせる機能と言えます。
試しに上記のコードの例をstrict modeをつけて実行してみます。
'use strict'; var test = 30; var test = 40; test3 = 50; console.log(test3);
この場合は「ReferenceError: assignment to undeclared variable test3」というエラーになり実行が止まります。
まとめ
ポイントとなる考え方はstrict modeにしない場合、なおかつvarをつけずに変数に代入した場合、エラーにはならなずに処理が続行されます。
この時に使用する変数はグローバルオブジェクトのプロパティして解釈されるので、注意が必要です。
また、グローバル変数のような振る舞いをすることになりますが、javascriptでは基本的にはvarを明記して変数宣言を行うようにします。