在介绍过程和函数的参数时跳过了一个概念:传址和传值。一个参数是传址还是传值取决于过程或函数定义中的声明。传址的参数用 ByRef 关键字说明,而传值的参数既可以用ByVal 关键字说明也可以不加任何说明——也就是说,没有明确地指定是哪一种的话,ByVal 就是默认值。
只可惜这段文字是错误的,VBS 过程和函数参数传递的方式默认是 ByRef,测试如下:
- Function f(x,y)
- t = x
- x = y
- y = t
- End Function
- x = 123
- y = 456
- WSH.Echo x, y '123 456
- x = 123
- y = 456
- f (x), (y)
- WSH.Echo x, y '123 456
- x = 123
- y = 456
- Call f(x,y)
- WSH.Echo x, y '456 123
- x = 123
- y = 456
- Call f((x),(y))
- WSH.Echo x, y '123,456
- x = 123
- y = 456
- z = f(x,y)
- WSH.Echo x, y '456,123
- x = 123
- y = 456
- z = f((x),(y))
- WSH.Echo x, y '123,456
除了证明 VBS 过程和函数参数传递的方式默认是 ByRef 以外,该脚本还说明了当用括号把表达式括起来的时候,内部会创建一个临时变量来保存括号中表达式的值