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