VBScript中變量作用域
更新時(shí)間:2007年02月27日 00:00:00 作者:
下午在寫程序的時(shí)候,碰到個(gè)變量重定義的問(wèn)題,具體是在一個(gè)函數(shù)中的兩個(gè)地方定義了相同的變量,兩個(gè)變量分別放在IF語(yǔ)句的兩部分中,本來(lái)以為這兩次定義在語(yǔ)句中不同的塊,應(yīng)該沒(méi)有影響,然而在運(yùn)行中IIS卻提示變量重定義,把重復(fù)定義去掉即正確。
解決了問(wèn)題之后突然想到在Fdream的blog看過(guò)一篇文章《JavaScript變量無(wú)塊級(jí)作用域》,似乎這兩個(gè)是差不多的,在VBScript中變量同樣沒(méi)有塊級(jí)作用域。
再次去看了那篇文章之后我也做了下試驗(yàn),得到結(jié)果:在VBScript中,函數(shù)中定義的變量的作用域是整個(gè)函數(shù),而不是塊級(jí),不管這個(gè)變量是在函數(shù)中哪個(gè)位置定義的。因此,函數(shù)中一個(gè)變量不管在函數(shù)的哪個(gè)位置定義,它在整個(gè)函數(shù)中都可以使用。
下面用一些例子來(lái)說(shuō)明這個(gè)問(wèn)題。
Option Explicit
Sub foo()
Dim var
var="hello,world!"
MsgBox var
End Sub
Call foo()
下面的代碼跟上面的代碼等效,但是var的定義放在了函數(shù)的最后:
Option Explicit
Sub foo()
var="hello,world!"
MsgBox var
Dim var
End Sub
Call foo()
下面的例子說(shuō)明變量不管在哪定義,在整個(gè)函數(shù)中都是可以使用的,當(dāng)然如果把定義的位置放的特殊一點(diǎn)有利于代碼的清晰,閱讀起來(lái)比較方便,修改時(shí)也比較方便。
Option Explicit
Sub foo()
Dim var1
var1="YES"
MsgBox "var1: "&var1&vbCrLf&"var2: "&var2
IF var1="YES" Then
Dim var2
var2="NO"
End IF
MsgBox "var1: "&var1&vbCrLf&"var2: "&var2
End Sub
Call foo()
在ASP開(kāi)發(fā)中,寫一個(gè)函數(shù)時(shí)通常的做法是變量到用時(shí)才定義,雖然變量的作用域與定義的位置無(wú)關(guān),不過(guò)我覺(jué)得還是寫在變量使用之前比較好,以后改起代碼來(lái)比較方便,不至于修改了一段代碼之后還要翻到函數(shù)頭去修改變量定義。
解決了問(wèn)題之后突然想到在Fdream的blog看過(guò)一篇文章《JavaScript變量無(wú)塊級(jí)作用域》,似乎這兩個(gè)是差不多的,在VBScript中變量同樣沒(méi)有塊級(jí)作用域。
再次去看了那篇文章之后我也做了下試驗(yàn),得到結(jié)果:在VBScript中,函數(shù)中定義的變量的作用域是整個(gè)函數(shù),而不是塊級(jí),不管這個(gè)變量是在函數(shù)中哪個(gè)位置定義的。因此,函數(shù)中一個(gè)變量不管在函數(shù)的哪個(gè)位置定義,它在整個(gè)函數(shù)中都可以使用。
下面用一些例子來(lái)說(shuō)明這個(gè)問(wèn)題。
復(fù)制代碼 代碼如下:
Option Explicit
Sub foo()
Dim var
var="hello,world!"
MsgBox var
End Sub
Call foo()
下面的代碼跟上面的代碼等效,但是var的定義放在了函數(shù)的最后:
復(fù)制代碼 代碼如下:
Option Explicit
Sub foo()
var="hello,world!"
MsgBox var
Dim var
End Sub
Call foo()
下面的例子說(shuō)明變量不管在哪定義,在整個(gè)函數(shù)中都是可以使用的,當(dāng)然如果把定義的位置放的特殊一點(diǎn)有利于代碼的清晰,閱讀起來(lái)比較方便,修改時(shí)也比較方便。
復(fù)制代碼 代碼如下:
Option Explicit
Sub foo()
Dim var1
var1="YES"
MsgBox "var1: "&var1&vbCrLf&"var2: "&var2
IF var1="YES" Then
Dim var2
var2="NO"
End IF
MsgBox "var1: "&var1&vbCrLf&"var2: "&var2
End Sub
Call foo()
在ASP開(kāi)發(fā)中,寫一個(gè)函數(shù)時(shí)通常的做法是變量到用時(shí)才定義,雖然變量的作用域與定義的位置無(wú)關(guān),不過(guò)我覺(jué)得還是寫在變量使用之前比較好,以后改起代碼來(lái)比較方便,不至于修改了一段代碼之后還要翻到函數(shù)頭去修改變量定義。
相關(guān)文章
ASP 中使用 HTTP 協(xié)議發(fā)送參數(shù)詳解
ASP 中使用 HTTP 協(xié)議發(fā)送參數(shù)詳解...2006-12-12ASP 常見(jiàn)的連接字符串寫法(access2007)
ASP中常見(jiàn)的連接字符串寫法,包括了access2007等2009-11-11ASP中的時(shí)間函數(shù)大全 時(shí)間操作函數(shù)
ASP中的時(shí)間函數(shù)大全 時(shí)間操作函數(shù)...2006-09-09ASP編程入門進(jìn)階(二十):ADO組件之插入數(shù)據(jù)記錄
ASP編程入門進(jìn)階(二十):ADO組件之插入數(shù)據(jù)記錄...2007-01-01如何將長(zhǎng)的標(biāo)題用省略號(hào)收尾
如何將長(zhǎng)的標(biāo)題用省略號(hào)收尾...2007-02-02用Asp如何實(shí)現(xiàn)防止網(wǎng)頁(yè)頻繁刷新?
用Asp如何實(shí)現(xiàn)防止網(wǎng)頁(yè)頻繁刷新?...2006-12-12