ASP中變數的使用範圍問題
<%
dim a
a = 10
function aa()
dim b
b = 5
response.write(a)'這裡輸出的是10,函數外部定義的變數可以稱之為全域變數,在任何位置都有效,包含FUNCTION內部、SUB內部,CLASS內部
a = 5 '由於a是在aa外部定義的,所以這裡對A的改動會影響到全域a的值
end function
call aa()
response.write(a) '這裡輸出的是5,因為a在AA函數內被改動了。
response.write(b) '這裡輸出的是空,因為b是在函數aa內部定義的,所以b只在aa內部有效
%>
再看一例
<%
dim a
a = 10
function aa()
dim a '注意這裡比上面的函數中加了一個dim a,在aa內部聲明的變數只在aa內部有效,此函數中的a與函數外面的a沒有任何關係,因此他不會影響到函數外a的值
a = 5
end function
call aa
response.write(a)'這裡輸出為10,因為在函數內部聲明的變數只在內部有效
%>
第三例
<%
dim a
a = 10
'注意這裡的參數使用了byval,不加byval預設情況下ASP將使用byref的方式傳值,byval簡單可以理解為複製參數的一個副本,因此a在aa中的變化實際上只是a的一個副本的變化,不會影響到外部a的值,因此在後面的輸出a仍然為10
function aa(byval a)
a = 5
end function
call aa(a)
response.Write(a)
%>
第四例
<%
dim a
a = 10
'這裡傳值的方式改成了byref,實際上加不加byref效果都不一樣,VBSCRIPT中的函數及過程預設的傳值方式都是byref
'byref意為傳送該參數的實際記憶體位址,因此在函數內修改a相當於修改了函數外部a的值,所以下面將會輸出5
function aa(byref a)
a = 5
end function
call aa(a)
response.Write(a)'這裡輸出的是5,因為在函數aa中a的值被改變了
%>