2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VBScriptのスコープについて

2
Posted at

VBScriptのスコープについて

VBScriptのコードをいじるようになって、少し気になったのがスコープの範囲。
ちょっと注意しなければいけないなと個人的に思うことがあったので、まとめてみようと思う。

各関数ごとにDimを使って変数を定義している場合

各関数の中でメモリが割り当てられているようで、各々が値を保持していることがわかる。
これはスクリプト実行時に「多重定義のエラー」が出ないことから予想していたのでしっくりきた。

sample.vbs
Dim val
val = 2
WScript.Echo val ' 2が表示される

chg1

WScript.Echo val ' 2が表示される

chg2

WScript.Echo val ' 2が表示される

Function chg1
    Dim val
    val = 3
    WScript.Echo val ' 3が表示される
End Function

Function chg2
    Dim val
    val = 4
    WScript.echo val ' 4が表示される
End Function

関数の外で変数を定義し、変数を使いまわした場合

変数に格納された最後の値が表示された。

sample.vbs
Dim val
val = 2
WScript.Echo val ' 2が表示される

chg1

WScript.Echo val ' 3が表示される

chg2

WScript.Echo val ' 4が表示される

Function chg1
    val = 3
    WScript.Echo val ' 3が表示される
End Function

Function chg2
    val = 4
    WScript.echo val ' 4が表示される
End Function

まとめ

各関数ごとに責任を持たせるのであれば、各関数ごとに変数を定義するのがベターだと思う。
「関数の中で閉じる変数のつもりが、グローバルになっていた」なんてことにならないように、Option Explicitを使って「定義していない変数は使えないようにする」のと合わせるとなおよい。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?