VBScriptの変数スコープについて質問があります。私は次のキーワードがあることを知っています( autoitscript.com から):
次の.vbsファイルがあると想像してください。
_Dim strPath
strPath = "C:\folder"
DisplayPath strPath
Sub DisplayPath(strPath) 'Does this strPath get it's own local scope?
MsgBox strPath
End Sub
_
関数内:DisplayPath(strPath)
、strPath
はローカル変数ですか?または、関数/サブは、スクリプトのメインセクションの上部にグローバル変数として定義されているstrPath
にアクセスできますか?
また、スクリプト言語で可能な、変数を使用するときに変数を定義するのではなく、明示的にDim
を使用することのポイントは何ですか?
strPath
プロシージャのDisplayPath
は新しい変数になりますが、期待する理由ではなく、コードに微妙な問題があり、問題が曇っています。
Sub
プロシージャを呼び出す場合、VBScript構文には括弧が含まれません。例えば:-
Sub MyProc(Param1, Param2)
'' # Do stuff
End Sub
MyProc("Hello", "World")
上記の場合、構文エラーが発生します。それは呼ばれるべきです:-
MyProc "Hello", "World"
これで、パラメーターが1つしかない場合、構文エラーは発生しません。これは、括弧の別の使用が式の一部であるためです。 '(a + b)* c'。の場合:-
DisplayPath(strPath)
VBScriptは「式」を解決します(strPath)
そしてresultをDisplayPath
に渡します。そのthis resultは、新しいストレージを生成し、結果を式に保持します。
で電話しましたか
DisplayPath strPath
新しく作成されたものはありません。
しかし、これはどうですか:-
Sub DisplayPath(something)
MsgBox something
End Sub
新しいストレージはまだ割り当てられていません。 something
は、strPath
と同じメモリを指します。
編集
以下のコードは機能します:-
Dim strPath
strPath = "c:\folder"
Display
Sub Display()
MsgBox strPath
End Sub
プロシージャの外でstrPath
を宣言すると、グローバルスコープになります。
明示的なDim
を使用する点に関して、上記の割り当て行がこのようになったらどうなるでしょうか。
strPath = "c:\folder"
strPath
という新しい変数が存在し、strPath
は空のままになります。 常に VBScriptファイルを次の行で開始する必要があります:-
Option Explicit
これにより、使用するすべての変数を明示的にDim
する必要があり、デバッグ時間を節約できます。