vbs(asp)下的Function 语句


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 过程修改数学表达式中变量的值时,应避免在同一表达式中使用该函数 。