Function 語(yǔ)句
聲明 Function 過程的名稱、參數(shù)以及構(gòu)成其主體的代碼。
[Public [Default]| Private] Function name [(
arglist
)]
[statements]
[name = expression]
[Exit Function]
[statements]
[name = expression]
End Function
參數(shù)
Public
表示 Function 過程可被所有腳本中的所有其他過程訪問。
Default
只與 Class 塊中的 Public 關(guān)鍵字一起使用 來表示 Function 過程是類的默認(rèn)方法。如果在一個(gè)類中指定了不止一個(gè) Default 過程,就有錯(cuò)誤發(fā)生。
Private
表示 Function 過程只可被聲明它的腳本中的其他過程訪問或者如果函數(shù)是一個(gè)數(shù)據(jù)類,那么 Function 過程只能被該類中的其他過程訪問。
name
Function 的名稱,遵循標(biāo)準(zhǔn)的變量命名約定。
arglist
代表調(diào)用時(shí)要傳遞給 Function 過程的參數(shù)的變量列表。用逗號(hào)隔開多個(gè)變量。
statements
在 Function 過程的主體中執(zhí)行的任意語(yǔ)句組。
expression
Function 的返回值。
arglist 參數(shù)包含下列語(yǔ)法和部分:
[ByVal | ByRef] varname[( )]
參數(shù)
ByVal
表示該參數(shù)是按值方式傳遞的。
ByRef
表示該參數(shù)按引用方式傳遞。
varname
代表參數(shù)變量的名稱;遵循標(biāo)準(zhǔn)的變量命名約定。
說明
如沒有顯式指定使用 Public或 Private,則 Function 過程默認(rèn)為公用,即它們對(duì)于腳本中的所有其他過程是可見的。Function 中局部變量的值在對(duì) 過程的調(diào)用中不被保留。
不能在任何其他過程(例如,Sub 或 Property Get)中定義 Function 過程。
使用 Exit Function 語(yǔ)句可以從 Function 過程中立即退出。程序繼續(xù)執(zhí)行調(diào)用 Function 過程的語(yǔ)句之后的語(yǔ)句??稍?Function 過程的任何位置出現(xiàn)任意個(gè) Exit Function 語(yǔ)句。
與 Sub 過程類似,Function 過程是可以獲取參數(shù)、執(zhí)行一系列語(yǔ)句并改變其參數(shù)值的獨(dú)立過程。與 Sub 過程的不同之處是:當(dāng)要使用由函數(shù)返回的值時(shí),可以在 表達(dá)式的右邊使用 Function 過程,這與內(nèi)部函數(shù)的使用方式一樣,例如 Sqr、Cos 或 Chr。
在表達(dá)式中,可以通過使用函數(shù)名,并在其后用圓括號(hào)給出相應(yīng)的參數(shù)列表來調(diào)用 Function 過程。有關(guān)調(diào)用 Function 過程的詳細(xì)信息,請(qǐng)參閱 Call 語(yǔ)句。
小心 Function 過程可以是遞歸的,即該過程可以調(diào)用自身以完成某個(gè)給定的任務(wù)。但是,遞歸可能會(huì)導(dǎo)致堆棧溢出。
要從函數(shù)返回一個(gè)值,只需將值賦給函數(shù)名。在過程的任意位置都可以出現(xiàn)任意個(gè)這樣的賦值。如果沒有給 name 賦值, 則過程將返回一個(gè)默認(rèn)值:數(shù)值函數(shù)返回 0,字符串函數(shù)返回零長(zhǎng)度字符串 ("")。如果在 Function 中沒有對(duì)象引用被指定給 name(使用 Set),則返回對(duì)象引用的函數(shù)將返回 Nothing。
下面的樣例說明如何給一個(gè)名為 BinarySearch 的函數(shù)賦返回值。在此樣例中,將 False 賦給了該函數(shù)名,表示沒有找到某個(gè)值。
Function BinarySearch(. . .) . . . '
未找到該值。返回 False
值。 If lower > upper Then
BinarySearch = False
Exit Function
End If
. . .
End Function
在 Function 過程中使用的變量分為兩類:一類是在過程內(nèi)顯式聲明的,另一類則不是。在過程內(nèi)顯式聲明的變量(使用 Dim 或等效方法)總是過程的局部變量。被使用但沒有在過程中顯式聲明的變量也是局部變量,除非在該過程外更高級(jí)別的位置顯式聲明它們。
小心 Function 過程可以是遞歸的,即該過程可以調(diào)用自身以完成某個(gè)給定的任務(wù)。但是,遞歸可能會(huì)導(dǎo)致堆棧溢出。
小心 VBScript 可能會(huì)重新排列數(shù)學(xué)表達(dá)式以提高內(nèi)部效率。當(dāng) Function 過程修改數(shù)學(xué)表達(dá)式中變量的值時(shí),應(yīng)避免在同一表達(dá)式中使用該函數(shù)。