亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > VBScript > 正文

vbs(asp) ByVal ByRef函數調用使用說明

2020-07-26 11:55:28
字體:
來源:轉載
供稿:網友

1、ByVal傳值:一種將參數值而不是將地址傳遞給過程的方式,這就使過程訪問到變量的復本。結果,過程不可改變變量的真正值。 
2、ByRef傳值:一種將參數地址而不是將值傳遞給過程的方式,這就使過程訪問到實際的變量。結果,過程可改變變量的真正值。除非另作說明,否則按地址傳遞參數。  
3、系統默認的是ByRef傳值。

例子:

復制代碼 代碼如下:

<SCRIPT LANGUAGE="vbScript">
dim a
a=0
document.write "a=0"
document.write "<br/>sub change(byref ar)<br/>"
change a
document.write a
a=0
document.write "<br/>sub change2(ByVal ar)<br/>"
change2 a
document.write a
a=0
document.write "<br/>sub change3( ar)<br/>"
change3 a
document.write a
a=0
document.write "<br/>function change4(byref ar)<br/>"
change4 a
document.write a
a=0
document.write "<br/>function change5(ByVal ar)<br/>"
change5 a
document.write a
a=0
document.write "<br/>function change6( ar)<br/>"
change6 a
document.write a
a=0
sub change(byref ar)
ar=111
end sub
sub change2(ByVal ar)
ar=222
end sub
sub change3( ar)
ar=333
end sub
function change4(byref ar)
ar=444
end function
function change5(ByVal ar)
ar=555
end function
function change6( ar)
ar=666
end function
</SCRIPT>

=======================
結果:
a=0
sub change(byref ar)
111
sub change2(ByVal ar)
0
sub change3( ar)
333
function change4(byref ar)
444
function change5(ByVal ar)
0
function change6( ar)
666
說明vbs默認是byRef,這點和VB一樣, 按地址。

再給出一個小例子,大家運行看效果!
復制代碼 代碼如下:

<%
Dim i,j,p,m
i = 10
j = 12
Response.Write i&"******"&j&"<br>"
Call Fun2 (i,j)
Response.Write i&"******"&j&"<br>"
i = 10
j = 12
Call Fun (i,j)
Response.Write i&"*******"&j&"<br>"
Function Fun2 (a,b)
a = 5
b = 6
Fun2 = 0
End Function
Function Fun (ByVal a,ByRef b)
a = 5
b = 6
Fun = 0
End Function
%>

通過上面的例子你可以發現:
1、ByVal傳值沒有改變全局變量的值。
2、ByRef傳值改變了全局變量的值。
3、系統默認的是ByRef傳值。

至于應該在什么時候使用嗎?這就要看自己的實際情況了!

ByVal 傳送參數內存的一個拷貝給被調用者。也就是說,棧中壓入的直接就是所傳的值。
ByRef 傳送參數內存的實際地址給被調用者。也就是說,棧中壓入的是實際內容的地址。被調用者可以直接更改該地址中的內容。
ByVal是傳遞值 源數據不會被修改
你可以把這個值當作自己的局部變量來使用
ByRef是傳遞地址 , 源數據可能被修改
你對這個變量的操作將對你傳入的那個變量產生影響,就像指針的感覺


vb6的說明
啥也不說了,接題:
復制代碼 代碼如下:

Function Test(a)
a = a + 1
End Function

c = 1
'------------------------------------
'問題:
' 請說出分別調用下面四種方法的結果?
'------------------------------------
'方法一
Test c

'方法二
'Test (c)

'方法三
'Test (c+1)

'方法四
'Call Test(c)

msgbox c

正確答案:分別為:2 , 1 , 1 , 2
你全答對了沒?全答對了你可以直接Return了,沒答對的話繼續往下看。

追溯
幾乎所有編程語言的函數傳參都有傳值和傳引用之分,我們的VB老兄也不例外,而且,她選擇了傳引用作為其默認方式,甚者,她對所有變量類型不加挑剔,全部默認采用傳引用的方式,包括整型變量(int)。這也是華山論劍敗北的最根本原因。
你可以在參數前使用ByVal(傳值)和ByRef(傳引用)關鍵字指明參數傳遞的方式:

'傳值方式,c值不變
復制代碼 代碼如下:

Function Test(ByVal a)
a = a + 1
End Function
c = 1
Test c
'c = 1

'傳值方式,c值不變
復制代碼 代碼如下:

Function Test(ByRef a)
a = a + 1
End Function
c = 1
Test c
'c = 2

領悟
通常,VB6的Function函數調用方法有兩種:
Func Params
如方法一:Test c

Call Func(Params)
如方法四:Call Test(c)


因此,論劍中的方法一和方法四實質上是一樣的,參數c都是通過默認的傳引用方式傳遞,執行完函數Test后,c的值會隨之改變。因此方法一和方法四的結果為:2
然而,江湖中似乎還流傳著這樣一種調用方法:


Func(Expression)
如方法二:Test(c) 和 方法三:Test(c+1)

注 意到沒有,括號中的內容不是Params,而是Expression,是一個表達式,而表達式的計算結果會被保存到一個臨時變量中傳入函數體,函數調用完畢 后臨時變量也隨之銷毀。因此,調用方法二時,表達式(c)的計算結果為1,保存到了一個臨時變量傳入函數Test中,函數執行完成后,原來的c值并不發生 改變。同理,方法三的調用更加顯得直觀一些,(c+1)的表達式運算結果被保存到了一個臨時變量傳入Test,原來的c值并不發送改變。所以,方法二和方 法三的結果為:1

出師
總結如下:
VB6和VBS中的函數參數默認是ByRef類型的。

Test(c)方法調用時,VB會認為你傳遞的不是一個變量,而是一個表達式:(c) ,這個表達式運算結果,雖然與c值相同,但卻是保存在一個臨時變量中,這個臨時變量的改變不會影響到原來的變量c

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产成人一区| 欧美激情综合亚洲一二区| 国产精品老牛影院在线观看| 国产精品高清在线| 欧美成人免费va影院高清| 久久精品国产成人| 日韩av日韩在线观看| 成人自拍性视频| 国产ts一区二区| 久久激情视频免费观看| 日韩久久午夜影院| 日本在线观看天堂男亚洲| 亚洲精品一区在线观看香蕉| 久久不射电影网| 亚洲国产另类 国产精品国产免费| 国产精品综合久久久| 九九热精品在线| 欧美综合一区第一页| 亚洲free性xxxx护士白浆| 97久久超碰福利国产精品…| 久久成年人视频| 欧美激情精品久久久久久黑人| 中文字幕亚洲精品| 欧美日韩国产二区| 亚洲iv一区二区三区| 日本成人黄色片| 久久精品国产2020观看福利| 成人黄色在线免费| 精品久久香蕉国产线看观看亚洲| 久色乳综合思思在线视频| 久久免费观看视频| 亚洲美女在线看| 69国产精品成人在线播放| 97**国产露脸精品国产| 成人疯狂猛交xxx| 久久综合久久美利坚合众国| 日韩在线观看免费高清完整版| 亚洲片在线观看| 国产成人精品在线观看| 26uuu日韩精品一区二区| 亚洲a中文字幕| 国产一区二区三区在线视频| 国内精品视频久久| 欧洲亚洲免费视频| 国产69精品99久久久久久宅男| 欧美在线欧美在线| 在线日韩日本国产亚洲| 久久精品中文字幕一区| 欧美日韩免费区域视频在线观看| 亚洲人成网站999久久久综合| 91精品国产高清久久久久久久久| 国产久一一精品| 午夜精品视频网站| 日韩精品一区二区三区第95| 欧亚精品中文字幕| 国产精品久久久久久久久久久久久久| 蜜月aⅴ免费一区二区三区| 欧美精品999| 精品视频在线播放色网色视频| 91wwwcom在线观看| 蜜月aⅴ免费一区二区三区| 一区二区三区四区视频| 久久久欧美一区二区| 亚洲午夜小视频| 少妇av一区二区三区| 国产精品老女人视频| 国产精品久久久亚洲| 亚洲影院色无极综合| 亚洲春色另类小说| 亚洲美女av电影| 亚洲综合大片69999| 成人午夜激情免费视频| 欧美日韩国产精品一区二区不卡中文| 日韩视频免费观看| 亚洲xxx大片| 欧美日韩裸体免费视频| 91亚洲国产成人精品性色| 国产精品99蜜臀久久不卡二区| 91网在线免费观看| 日韩精品中文字幕视频在线| 国产精品视频大全| xxx一区二区| 国产精品十八以下禁看| 久久综合伊人77777蜜臀| 国产亚洲人成a一在线v站| 亚洲国产精品成人av| 欧美成人午夜激情视频| 久久久久久亚洲精品中文字幕| 91av国产在线| 欧美裸体视频网站| 欧美精品电影免费在线观看| 亚洲国产另类久久精品| 中文字幕精品一区久久久久| 国产精品福利在线观看网址| 日韩精品www| 国产精品视频最多的网站| 美女性感视频久久久| www.欧美免费| 国产91|九色| 日韩影视在线观看| 亚洲精品成人久久| 亚洲精品视频免费| 色悠悠久久久久| 96精品久久久久中文字幕| 久久久久久久国产| 精品久久久久久中文字幕| 97热精品视频官网| 91亚洲一区精品| 日韩久久午夜影院| 国产成人精品在线播放| 国产日韩欧美综合| 韩国国内大量揄拍精品视频| 亚洲午夜未删减在线观看| 国产欧美一区二区白浆黑人| 一本色道久久综合狠狠躁篇怎么玩| 91地址最新发布| 欧美性20hd另类| 中文字幕亚洲激情| 精品香蕉一区二区三区| 精品国产依人香蕉在线精品| 97香蕉超级碰碰久久免费的优势| 一区二区三区四区精品| 欧美性猛交xxxx黑人猛交| 国产精品video| 国产日韩精品入口| 色综合久久久久久中文网| 国产精品视频一| 日本欧美精品在线| 欧美xxxx做受欧美.88| 色偷偷av一区二区三区乱| 91沈先生作品| 在线观看免费高清视频97| 中文字幕在线精品| 亚洲精品国产精品久久清纯直播| 久久精品视频在线观看| 美女视频黄免费的亚洲男人天堂| 丝袜美腿亚洲一区二区| 久久精品成人欧美大片古装| 日韩欧美中文字幕在线播放| 欧美国产日本高清在线| 欧美高清视频在线播放| 国产精品av在线播放| 国产精品av网站| 欧美激情va永久在线播放| 亚洲小视频在线观看| 91精品国产色综合| 一本色道久久综合狠狠躁篇怎么玩| 日韩美女av在线免费观看| 亚洲最大福利视频网| 国产精品久久久久久久久借妻| 日本亚洲欧美三级| 亚洲精品乱码久久久久久金桔影视| 欧美性猛交xxxx免费看漫画| 中文字幕一精品亚洲无线一区| 精品国产91久久久| 5566日本婷婷色中文字幕97| 国产精品男人爽免费视频1| 美女国内精品自产拍在线播放| 91精品国产高清久久久久久| 欧美国产亚洲精品久久久8v| 法国裸体一区二区| 亚洲国产91色在线| 一区二区欧美久久| 亚洲老头老太hd|