Deep BlueVBScriptWMIPHPC语言JavaScriptWindows API路由器Windows函数Python | VBS过程和函数参数传递的方式默认是ByVal还是ByRef?我一直以为 VBS 过程和函数参数传递的方式默认是 ByVal,直到我膝盖中了一箭。
在《VBScript Programmers Reference》一书的101页和102页有这样一段文字:
在介绍过程和函数的参数时跳过了一个概念:传址和传值。一个参数是传址还是传值取决于过程或函数定义中的声明。传址的参数用 ByRef 关键字说明,而传值的参数既可以用 ByVal 关键字说明也可以不加任何说明——也就是说,没有明确地指定是哪一种的话,ByVal 就是默认值。 只可惜这段文字是错误的,VBS 过程和函数参数传递的方式默认是 ByRef,测试如下: Function f(x, y) t = x x = y y = t End Function 'Author: Demon 'Website: http://demon.tw 'Date: 2012/2/5 x = 123 : y = 456 f x, y WScript.Echo x, y '输出456 123 x = 123 : y = 456 f (x), (y) WScript.Echo x, y '输出123 456 x = 123 : y = 456 Call f(x, y) WScript.Echo x, y '输出456 123 x = 123 : y = 456 Call f((x), (y)) WScript.Echo x, y '输出123 456 x = 123 : y = 456 z = f(x, y) WScript.Echo x, y '输出456 123 x = 123 : y = 456 z = f((x), (y)) WScript.Echo x, y '输出123 456 除了证明 VBS 过程和函数参数传递的方式默认是 ByRef 以外,该脚本还说明了当用括号把表达式括起来的时候,内部会创建一个临时变量来保存括号中表达式的值。 |