vbs参数传递类型被改了?还是只有我这样
vbs吧
全部回复
仅看楼主
level 3
是呆猫喵 楼主
是这样的
sub sub_(f)
f=6
end sub
function function_(f)
f=6
end function
dim m,n
m=7
n=7
msgbox "第一次"&cstr(m)&"/"&cstr(n)
sub_(m)
call function_(n)
msgbox "第二次"&cstr(m)&"/"&cstr(n)
运行结果:
第一次7/7
第二次7/6
这里sub仍然是默认按值,但是function却是默认按引用的,不管是call还是返回给别人还是去括号都是这样,只有显式byval才能按值。
到网上搜或者问ai都是给出sub和function默认都是按值的结果,我也不知道这个情况是什么时候出现的,现在才发现,求大佬解惑了。
(图不知道发什么所以发个wscript.exe的属性了
2025年10月07日 08点10分 1
level 3
是呆猫喵 楼主
sub sub_(f)
f=6
end sub
function function_(f)
f=6
end function
dim m,n
m=7
n=7
msgbox "第一次"&cstr(m)&"/"&cstr(n)
sub_(m)
call function_(n)
msgbox "第二次"&cstr(m)&"/"&cstr(n)
2025年10月07日 09点10分 2
level 5
确实 没注意过 用call调用是传址(函数有返回值时,赋值调用也是),但直接调用时是传值
2025年11月18日 00点11分 3
level 5
我的理解是:默认就是传址的。
感觉是因为在不带call或赋值时的调用中,默认就是不能带()的,单参数时如带了()将被认为是括号计算,也就变成了传值(即括号内计算后的值),相当于js下的闭包
2025年11月18日 01点11分 4
level 3
是呆猫喵 楼主
谢谢各位了
2025年11月22日 12点11分 5
1