本日もSpesificationOfVBScriptをご覧いただきありがとうございます。
本日のトピックスはVBScriptでの変数のスコープです。
1.What is?
変数には、どの範囲で使えるかというスコープがあります。どの関数でも関係なく使えるものと、特定の領域でしか使えないものがあります。
両方定義した場合に、どちらが優先されるのがをおさえておきたいところです。
グローバル領域で宣言した場合⇒どの関数からでも利用できます。
関数内で宣言した場合 ⇒同一関数内がスコープになります
注意:関数内でグローバル領域で宣言した変数と同名の変数を宣言した場合、関数内のローカル変数が優先されます。
ローカル変数が優先されるとはどういうことかというと、↓のサンプルコードをテキストメモに張り付けてファイル名「test.vbs」として、ファイルの種類「すべてのファイル」を選択した状態で保存してダブルクリックしてみてください。
グローバル領域で宣言した場合⇒どの関数からでも利用できます。
関数内で宣言した場合 ⇒同一関数内がスコープになります。
注意:関数内でグローバル領域で宣言した変数と同名の変数を宣言した場合、関数内のローカル変数が優先されます。
ローカル変数が優先されるとはどういうことかというと、↓のサンプルコードをテキストメモに張り付けてファイル名「test.vbs」として、ファイルの種類「すべてのファイル」を選択した状態で保存してダブルクリックしてみてください。
function a
dim www :www ="中"
msgbox www
end function
dim www :www ="外"
a
msgbox www
予想1 変数宣言の競合でコンパイルエラー
予想2 ローカル変数優先ということで、「中」「中」と表示される
予想3 ローカル変数のスコープは関数の中だけで、関数内ではローカル変数が優先されるから「中」「外」と表示される
結果:予想3のとおり。
では、関数の引数にグローバル変数と同じ変数名を使用したら、どうなるでしょう。
引数についても、上のローカル変数と同様の結果になります。
function a(www)
msgbox www
end function
dim www :www ="外"
a "引数"
msgbox www
関数の引数に渡した”引数”という文字列は、関数の引数wwwに格納され、関数内で使用されます。
戻り値を戻さない関数ですので、”引数”というメッセージを表示したあと、処理が関数から、グローバル領域に戻ってきます。
そして、msgbox www
が実行されます。このとき、参照するwww
変数はグローバル変数です。
グローバル変数の定義を削ってみましょう。
↓のコードは、関数内にのみ、www変数の定義があります。
function a(www)
msgbox www
end function
a "引数"
msgbox www
予想1 グローバル変数がないため、
a "引数"
msgbox www
のmsgbox www
でコンパイルエラー
予想2 メッセージボックスは表示されるが、参照する変数www
に値が入っていないため、空で表示される
結果:予想2の通り。
グローバル領域において、宣言していない変数を使おうとしていたので、Option Explicitを宣言していたら、エラーになっていました。
本日は以上になります。
本日もSpesificationOfVBScriptをご覧いただきありがとうございま した。
明日が、あなたにとってなりたい自分に近づける日でありますように。