JavaScript で変数を使用する際の注意事項

PROGRAM


JavaScript で変数を使用する際の注意事項

JavaScript では、変数宣言をせずに使用した変数は大域変数(グローバル変数)として扱われ、どの関数スコープからでも値の読み書きができるようになっています。

これを意識せずにプログラミングを行った場合、思いがけない動作不良が起こることがあるので十分注意が必要です。変数を使用する際には必ず事前に var を使って宣言をする癖をつけておくことで、バグを未然に回避することができると思います。

 

たとえば、次のようなプログラムを作成してしまったとすると、変数 i の値が勝手に変わってしまい、for ループが途中で打ち切られてしまいます。

// for のループカウンターを変数宣言なしで使用しています。

for (i = 0; i < 100; i++)

{

// for ループ内で、大域変数 i を使用する関数を呼び出しています。

func1();

}

function func1()

{

// 変数宣言をしていない変数 i に値を代入しています。

i = 10000;

}

たとえばこのような感じの場合、意図したところであれば 1 から 99 までの 100 回、func1 関数を実行したいといったところだとしても、ループカウンター i が大域変数として使用されているため、func1 の内部でそれが 10000 に書き換えられてしまうため、func1 関数の実行を終えた段階で i = 10000 となり、繰り返しの条件である "i < 100" を満たさなくなったため、処理が打ち切られてしまいます。

この程度の階層であればすぐにわかるかもしれませんが、func1 関数内でさらにいくつもの関数を呼び出して、その中で大域変数 i の値を変更されてしまった場合、見つけ出すのも大変になってくるかもしれません。

 

これを避ける方法としては、for ループで使用する変数を必ず var で宣言するようにします。

大域変数はどこでその変数が使用されるか分らないため、原則、自分だけが使用する値である場合には var による変数宣言を行った方が安全のため、それも踏まえると、次のようにプログラムを書き換える必要があると思います。

// for のループカウンターを var を用いて局所変数として宣言して使用しています。

for (var i = 0; i < 100; i++)

{

func1();

}

function func1()

{

// 自分自身が使う変数は var を使用して局所変数として宣言します。

var i = 10000;

}

このようにプログラミングを行うことで、どこかで同じ名前の大域変数が使用されても、それの影響を受けることなく、意図した処理を行うことが可能になります。


[ もどる ]