找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 36832|回复: 5

[原创] VBS过程(sub)传值(byval)与传址(byref)的区别

[复制链接]
发表于 2012-3-31 11:45:04 | 显示全部楼层 |阅读模式
在VBScript程序员应用手册上看到这点,感觉很这本书很有用,发出来和大家分享。

定义方式:sub 过程名(byval  变量1,byref  变量2)

传值(byval):在sub过程中,定义成传值的话,对脚本级变量修改只限于过程中,过程结束,脚本级变量恢复原来的值。因为这种修改是临时的,可以想像成过程中的变量名虽然与脚本级变量名一样,但是对应不同的地址。

传址(byref):在sub过程中,定义成传址的话,对脚本级变量修改是永久的,过程结束,脚本级变量值变化。这种修改是对变量原址的修改,即对原变量的修改,是永久的。

例子(缘自《VBScript程序员应用手册》):

  1. Option Explicit
  2. Dim lngA
  3. Dim lngB
  4. lngA = 1
  5. lngB = 1
  6. ByRefByValExample lngA, lngB
  7. MsgBox "lngA = " & lngA & vbNewLine & "lngB = " & lngB
  8. Sub ByRefByValExample(ByRef lngFirst, ByVal lngSecond)
  9. lngFirst = lngFirst + 1
  10. lngSecond = lngSecond + 1
  11. End Sub
复制代码
结果如下图:
发表于 2012-3-31 12:28:40 | 显示全部楼层
基本上所有语言的传值和传址都是这样的
发表于 2012-3-31 15:14:08 | 显示全部楼层
本帖最后由 ivor 于 2012-3-31 15:16 编辑

难道这是 引用传递和值传递。。
发表于 2012-3-31 15:21:16 | 显示全部楼层
值传递只是将参数复制一份而已,函数进行操作的是另一个参数,只是另一个参数的值和传递的参数值是相同的。
而地址传递是直接把参数的地址传递给函数,这时函数是直接对原来的参数进行操作的。所以值会变化。
 楼主| 发表于 2012-3-31 15:50:42 | 显示全部楼层
回复 4# ivor


我觉得可以这样理解啊
发表于 2012-4-8 19:29:10 | 显示全部楼层
微软有专用说明:ByRef和ByValue。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 21:22 , Processed in 0.016881 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表