VBScript基础,变量,函数,流程

1 VBScript基础

1.1 Option Explicit

Option Explicit语句放到脚本的开头,所有的其他语句之前。这就是告诉VBScript,代码要求所有的变量在使用之前都必须先显式地声明。现在 VBScript 就不再会允许您在代码中不做声明就引入新的变量
如果使用了Option Explicit,但是没有声明变量VBScript会终止运行,并提示以下错误: Variable is undefined: 'lgnSecond'。这是个好消息,因为现在就知道要修复这个错误。只要使用了 Option Explicit 语句, VBScript 就会捕获变量的输入错误

2 函数和过程

2.1 过程

作为过程的具名代码块是用 Sub 关键字来识别的。Subsubprocedure的缩写,这是“p
rocedure”的另一种说法。
用下面的语法声明过程:

[Public|Private] Sub Name ([Argument1],[ArgumentN])
[ code inside the procedure ]
End Sub

2.2 函数

函数的语法跟过程的语法是一样的,唯一的区别在于将关键字Sub改为 Function

[Public|Private] Function Name ([Argument1],[ArgumentN])
[ code inside the function ]
End Function

2.3 调用过程和函数

2.3.1 过程调用

在这里插入图片描述

  • 这两种合法的方式在功能上是等价的,选择哪一种主要取决于自己的喜好。
  • 有些人说第二种方式(使用 Call关键字)更清晰,但也有人讨厌打更多的字。
  • 有些人喜欢第二种方式是因为它更像 VBScript 的前辈 BASIC 编程语言。
  • 两个方式都很常见, Visual Basic 和 VBScript程序员对这两者都很习惯。
  • 在调用过程(相对的则是函数)时,若选择不使用 Call 关键字,那就不能将传递给该过程的参数放在圆括号中。
  • 同样,如果要使用 Call 关键字,那么圆括号就是不可缺少的。这就是使用方法

2.3.2 函数调用

在这里插入图片描述

2.4 退出过程或函数

  • 在过程或函数内部的最后一行代码运行完之后自然就会退出。
  • 有时您需要立即结束一个过程而不是等到代码全部运行完。
  • 可以使用 Exit Sub 语句(过程),也可以使用 Exit Function 语句(函数)。
  • 只要出现 Exit语句,那么代码的流程就会返回到调用者。

3 变量作用域和声明

3.1 变量作用域

在 VBScript 中有三种变量作用域:

  • 脚本级(script-level)作用域:变量在整个脚本文件的代码中都是有效的。在脚本文件(比如 Windows 脚本宿主的.VBS 文件或是活动服务页面的.ASP 文件)―主体‖中声明的变量的作用域就是整个脚本。
  • 过程级(procedure-level)作用域:变量在过程或函数中有效。过程之外的其它代码,甚至是同一个脚本文件中的代码也不能访问过程级变量。过程级作用域也被称为―局部‖作用域,程序员通常将被声明为过程级的变量称为―局部变量‖。
  • 类级(class-level)作用域:这是一种包含属性和方法的逻辑分组的特殊结构。在 VBScript 中,脚本中用 Class...End Class 代码块定义类。类定义的主体中用 Private语句声明的变量的作用域就是类级的。意思就是类中的其他代码可以访问这个变量,但是类定义之外的代码,即使是同一个脚本文件中的代码也不能访问这个变量。

3.2 变量声明

有三种语句可以用于声明变量: DimPrivatePublic

  • Dim:这个语句用于声明脚本或过程级作用域的变量。所有被声明为脚本级的变量自动地在整个脚本文件中有效,无论使用的是 Dim、 Private 还是 Public。要声明过程内部的变量(也就是局部变量),必须使用Dim不能在过程内部使用 Public 和Private。如果用于类级的变量, Dim 的效果跟 Public 是完全相同的。
  • Private:可以在脚本或类级作用域使用 Private 语句,但是不能在过程或函数内部使用。如果用于脚本级变量,它的作用跟 Dim 和 Public 是完全相同的。所有在脚本级声明的变量都自动地在整个脚本文件中有效,无论使用 Dim、 Private 还是 Public。尽管 VBScript 不需要它,但还是有很多程序员喜欢用 Private 语句声明脚本级的变量,而将 Dim 保留用于过程或函数中的局部变量。为了声明一个私有的类级变量,必须要用 Private。所有在类级用 Dim 或 Public 声明的变量在整个类中都是一个有效的公共属性。
  • Public:可能会用 Public 语句声明脚本级作用域的变量,但是在效果上它跟 Dim 或 Private 是一样的。 Public 真正有意义的地方就在于类。用 Public 声明的类级变量就是这个类的公共属性。 Public 在脚本级没有意义(脚本构件(script component))的原因就在于变量在其存在的脚本文件外是没有用的。所以,Public 唯一有意义的就是创建类的公共属性。但要注意,很多 VBScript 程序员不鼓励在类中使用 Public 变量,而喜欢使用 Private 类级变量和 Property LetSetGet 过程的组合。
    这三点中包含了很多规则

4 流程控制

4.1 分支结构

4.1.1 if分支

If...End If结构可以很简单,也可以变得比较复杂。其最简形式的语法如下。

If < expression > Then
< other code goes here >
End If

< expression >中可以使用任何结果是TrueFalse 的语句(也就是布尔表达式)。可以是一个数学等式
下面是一串对不同表达式求值的 ElseIf 代码块

If boolFirst Then
< other code goes here >
ElseIf boolSecond Then
< some other code goes here >
ElseIf boolThird Then
< some other code goes here >
ElseIf lngTest = 1 Then
< some other code goes here >
ElseIf strName = ―Bill‖ Then< some other code goes here >
End If

4.1.2 Select Case 分支

Select...End Select 的语法如下:

Select Case < expression >
Case <possibility 1>
< code goes here >
Case <possibility 2>
< other code goes here >
Case <possibility 3>
< other code goes here >
Case <possibility n>
< other code goes here >
Case Else
< other code goes here >
End Select

注意:这是对同一个表达式多次求值, 而If...ElseIf...End If可以对不同的表达式求值。还要注意在完成所有测试后,还可以有一个可选的 Case Else,如果其它的选项都没有返回 True 时就会执行这个代码块

4.2 循环结构

4.2.1 For…Next

For…Next循环适用于两种情况:

  • 代码反复执行的次数已知。
  • 对诸如数组、文件或数据库表等复杂数据结构中的每个元素执行一段代码(但是For Each…Next 循环是专门为另外一种复杂数据结构,集合(collection)设计的)。先来看看如何使用 For…Next 循环将一段代码执行若干次
Option Explicit
Dim lngIndex
For lngIndex = 1 To 5
MsgBox "Loop Index: " & lngIndex
Next

首先要注意,要使用 For…Next 循环就需要一个循环变量—— 也就是循环索引(loop index)。 lngIndex 变量就是这个功能。语句 For lngIndex = 1 To 5 意思就是这个循环会执行 5次。您可以从这些对话框中看到, lngIndex 的值逐步地从 1 增加到 5。在完成第 5 次循环后,
循环结束,代码继续运行。注意,并不一定要从 1 开始执行 5 次循环(FOR_LOOP_NOT_ ONE.VBS)
还可以用 Step 关键字跳过某些数字,就是每次步长的增长值

4.2.1.1 跳出循环

Exit For 语句随时终止循环

4.2.2 For Each…Next

For Each…Next 循环是一种特殊的循环,专门用于遍历集合。集合(collection),顾名思义,就是数据的集合,很像一个数组。集合中通常含有同一类型的对象(尽管集合也可以存放各种类型的数据)。
例如, VBScript 的内建运行时对象FileSystemObjectFolder对象,表示文件系统中的目录。 Folder 对象有一个 Files 集合,表现为一个属性。在 Folder.Files 集合中可能会有若干的 File 对象。可以用For Each…Next 循环遍历 Folder.Files 集合中的每个 File 对象。For Each…Next 循环中不能直接控制循环次数

4.2.3 Do Loop

Do 循环是最通用的循环结构。因为可以非常方便地用它根据任何所需的标准来设定循环次数

Do 循环的威力来自于While 和 Until关键字。 While 和 Until 既可以用在循环的开始,也可以用在循环的结尾来控制是否要再次执行循环。看一下这个使用 Do 循环的简单例子

Option Explicit
Dim boolLoopAgainDim lngLoopCount
Dim strResponse
boolLoopAgain = False
lngLoopCount = 0
Do
boolLoopAgain = False
lngLoopCount = lngLoopCount + 1
strResponse = InputBox("What is the magic word?")
If UCase(Trim(strResponse)) = "PLEASE" Then
MsgBox "Correct! Congratulations!"
Else
If lngLoopCount < 5 Then
MsgBox "Sorry, try again."
boolLoopAgain = True
Else
MsgBox "Okay, the word we wanted was "Please"."
End If
End If
Loop While boolLoopAgain

4.2.3.1 在 Until 和 While 之间做出选择

whilefalse终止循环,是true开始下一次循环,而until刚好相反,true 是终止循环,false是开始下一次循环

4.2.3.2 跳出 Do 循环

Exit Do 语句。跟Exit For 类似,可以用Exit Do 随时跳出 Do循环。在循环中可以有很多 Exit Do 语句

4.2.4 While…Wend

While…Wend 循环是一种来自老版本的 BASIC 和 Visual Basic的老式语法。相对于不太通用的While…Wend循环,程序员通常更喜欢用 Do 循环。
这并不是说就绝对不能使用 While…Wend 循环,还是有不少程序员在使用它。它能运行,简单,而且没有任何迹象表明微软会停止支持它。它只是有些跟不上时代。为了保持内容的完整,下面是一个While…Wend 语法的例子

Option Explicit
Dim lngCounter
lngCounter = 0
While lngCounter <= 20
lngCounter = lngCounter + 1
'< other code goes here >
Wend

Do 循环不一样,这里不需要使用 While 或 Until,也不能将条件放在循环的结尾。判断是否继续循环的条件只能放在循环的开头。最后, While…Wend 最主要的限制就是它没有等价于 Exit ForExit Do 的语句,这意味着不能强行跳出循环

发布了334 篇原创文章 · 获赞 186 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/u012060033/article/details/103349614