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