見出し画像

#20 変数の有効範囲(初心者向け、var による宣言)

下のような GAS のプログラムを作成してみました。今回はプログラムの動作が目的ではなく、プログラム中で変数がどこまで有効なのかを確認するためのものです。
なお、今回の説明はプログラミングをはじめたばかりの初心者向けの説明を想定しており、var による変数宣言について取り扱っています。

確認のためのプログラム

上記の funcA() を実行すると、以下のような結果となります。 

プログラムの実行結果

動作の説明

関数 funcA() から実行すると、どのような動作になるのか、順に説明すると…

  1. 3行目の funcA() から処理がはじまる。

  2. 4行目、変数 valueB を宣言し、2 を初期値として設定しています。

  3. 5行目、この時点での valueA と valueB を表示しています。
    valueA は 1行目で宣言されているものの、何も代入されていない状態なので undefined となっています。

  4. 7行目、valueA1 を代入しています。

  5. 8行目、funcB() を呼び出しています。

  6. 12行目、funcB() の処理が始まります。

  7. 13行目、変数 valueA を宣言し、3 を初期値として設定しています。

  8. 14行目、変数 valueB を宣言し、4 を初期値として設定しています。

  9. 15行目、この時点での valueA と valueB を表示しています。
    valueA は 13行目、valueB は 14行目で宣言されているものが利用されるので、それぞれ 34 が表示されます。

  10. 16行目、funcB() の処理が終わる。→ 8行目の処理が終わったことになる。

  11. 9行目、この時点での valueA と valueB を表示しています。
    ここでの表示は 5行目と同じで、valueA は 1行目、valueB は 4行目で宣言されているものが利用されます。そのため、それぞれ 2 が表示されます。 ※funcB() の変数とは関係ない。

  12. 10行目、funcA() の処理が終わる。→ プログラムの実行が終了

という感じです。注意すべき点は、

  • 関数の中で宣言されている変数については、その関数の中だけで有効になり、それぞれの関数で同じ名前であっても別のものとして扱われる。

  • 変数を宣言しても、値が設定されていない状態だと undefined となる。

  • 関数の外側で宣言されている変数は、プログラム中のどこでも利用できるが、関数内で同じ名前で宣言されると関数内の宣言が優先される。

下図のように 13行目をコメントにした場合、valueA は 1行目で宣言した変数となります。

13行目がコメントにした場合

注意すべきなのは、上の注意点を踏まえずに、変数を宣言しなかった場合です。
下図のように、13行目・14行目で var を利用せずに、変数の代入をした場合、valueA については、宣言されていない場合と同じように、1行目で宣言された変数が使用されます。valueB については、var を用いて宣言されていなくても、代入が行われた場合には、宣言されたものとして扱われます。

13行目・14行目で宣言せずに変数を使用した場合

ただし、下図のように 14行目をコメントにして、宣言されていない変数を参照した場合には、実行時にエラーとなります。

14行目をコメントにした場合

まとめ

GAS のプログラムを行う場合、上の注意点を再掲しますが、これらの点に注意しましょう。

  • 関数の中で宣言されている変数については、その関数の中だけで有効になり、それぞれの関数で同じ名前であっても別のものとして扱われる。

  • 変数を宣言しても、値が設定されていない状態だと undefined となる。

  • 関数の外側で宣言されている変数は、プログラム中のどこでも利用できるが、関数内で同じ名前で宣言されると関数内の宣言が優先される。

今回は、プログラミングをはじめたばかりの人向けに説明することを目的に、プログラムの動作を含めて説明してあります。そのため、var と let の違いについては言及していません。
最後になりますが、プログラミングの用語的には、このような変数が有効な範囲のことを「スコープ」と表現します。ここまでの内容が理解できたら、他の方が作成された以下のページを見ると、let や const についても理解が進むと思います。



この記事が気に入ったらサポートをしてみませんか?