変数の宣言(その3)

javascript

変数を宣言する方法について検証

変数の宣言について、繰り返して宣言した場合の動きを試します。

次のようなコードを書きます。

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を明記して変数宣言を行うようにします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です