本日も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をご覧いただきありがとうございま した。
明日が、あなたにとってなりたい自分に近づける日でありますように。

カテゴリー: 未分類

コメントを残す

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