VBScript: Functionの引数(参照渡しと値渡しを区別する)
VBScriptでFunctionプロシージャに引数を渡す場合、 「参照渡し(ByRef)」と「値渡し(ByVal)」の2通りがあります。
「参照渡し」ではFunctionプロシージャ側で引数の値を書き換えた場合、
呼び出し元の変数の値も変更されます。
「値渡し」ではFunctionプロシージャ側で引数の値を書き換えても、
呼び出し元の変数の値は変更されません。
「参照渡し(ByRef)」と「値渡し(ByVal)」の指定方法は次の通りです。
Function 関数名(ByVal 引数1, ByRef 引数2) ' 処理 End Function
「ByVal」や「ByRef」を省略した場合は「参照渡し(ByRef)」となります。
ByRefとByValによる動作の違い
次のサンプルコードでは、 ByRefとByValによる動作の違いを検証しています。
関数「Test」の第1引数は「参照渡し(ByRef)」、 第2引数は「値渡し(ByVal)」で指定し、 Functionプロシージャ内で値を変更しています。
' 関数定義 Function Test(ByRef x, ByVal y) x = 1 y = 1 Test = x + y End Function a = 4 b = 5 '関数呼び出し c = Test(a, b) WScript.Echo a ' 1 WScript.Echo b ' 5 WScript.Echo c ' 2
変数「a」は「参照渡し(ByRef)」なので値が書き換えられていて「1」になっています。 変数「b」は「値渡し(ByVal)」なので値は書き換えられていません。