ByRef vs ByVal
This guide discusses VBScript argument passing.
There has always been confusion about what exactly
ByVal mean in VBScript. The confusion arises because VBScript uses “by reference” to mean two similar, but different things. VBScript supports:
- Reference types
- Variable references
The best way to illustrate the difference is with an example. Consider this class:
Class Foo Public Bar End Class
Now we can create an instance of this class:
Dim Blah, Baz Set Blah = New Foo Set Baz = Blah Blah.Bar = 123
Baz are references to the same object. The fourth line changes both
Baz.Bar because these are different names for the same thing.
That’s the “reference type” feature. We say that VBScript treats objects as reference types.
Now consider this little program:
Sub Change(ByRef XYZ) XYZ = 5 End Sub Dim ABC ABC = 123 Change ABC
This passes a reference to variable
ABC. The local variable
XYZ becomes an alias for
ABC, so the assignment
XYZ = 5 changes
ABC as well.