VBScript基础,变量,函数,流程
文章目录
- 1 VBScript基础
- 1.1 Option Explicit
- 2 函数和过程
- 2.1 过程
- 2.2 函数
- 2.3 调用过程和函数
- 2.3.1 过程调用
- 2.3.2 函数调用
- 2.4 退出过程或函数
- 3 变量作用域和声明
- 3.1 变量作用域
- 3.2 变量声明
- 4 流程控制
- 4.1 分支结构
- 4.1.1 if分支
- 4.1.2 Select Case 分支
- 4.2 循环结构
- 4.2.1 For…Next
- 4.2.1.1 跳出循环
- 4.2.2 For Each…Next
- 4.2.3 Do Loop
- 4.2.3.1 在 Until 和 While 之间做出选择
- 4.2.3.2 跳出 Do 循环
- 4.2.4 While…Wend
1 VBScript基础
1.1 Option Explicit
将Option Explicit
语句放到脚本的开头,所有的其他语句之前。这就是告诉VBScript
,代码要求所有的变量在使用之前都必须先显式地声明
。现在 VBScript 就不再会允许您在代码中不做声明就引入新的变量
如果使用了Option Explicit
,但是没有声明变量VBScript
会终止运行,并提示以下错误: Variable is undefined: 'lgnSecond'
。这是个好消息,因为现在就知道要修复这个错误。只要使用了 Option Explicit
语句, VBScript
就会捕获变量的输入错误
2 函数和过程
2.1 过程
作为过程的具名代码块是用 Sub
关键字来识别的。Sub
是subprocedure
的缩写,这是“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 变量声明
有三种语句可以用于声明变量: Dim
、 Private
和 Public
。
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 Let
、Set
和Get
过程的组合。
这三点中包含了很多规则
4 流程控制
4.1 分支结构
4.1.1 if分支
If...End If
结构可以很简单,也可以变得比较复杂。其最简形式的语法如下。
If < expression > Then
< other code goes here >
End If
< expression >
中可以使用任何结果是True
或False
的语句(也就是布尔表达式)。可以是一个数学等式
下面是一串对不同表达式求值的 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 的内建运行时对象FileSystemObject
是 Folder
对象,表示文件系统中的目录。 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 之间做出选择
while
是false
终止循环,是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 For
或 Exit Do
的语句,这意味着不能强行跳出循环
VBScript基础,变量,函数,流程相关推荐
- MySql基础篇---004 其它数据库对象篇:视图,存储过程与函数,变量、流程控制与游标 ,触发器
第14章_视图 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 常见的数据库对象 对象 描述 表(TABLE) 表是存储数据的逻辑单元,以行和列的形 ...
- Activiti7工作流引擎:基础篇(七) 流程变量
不要指望别人能帮你多少,人生事事物物都得靠自己. 一:简介 流程变量就是if(条件)中使用到的变量用于参与条件表达式的计算. 变量都是有作用域的,在程序中方法内部的变量是属于局部变量,方法外的变量属于 ...
- MySQL-视图-触发器-事务-存储过程-函数-流程控制-索引与慢查询优化-06
目录 视图*** 什么是视图 为什么要用视图 如何生成视图 修改视图 --> 最好(千万)不要 关联表数据改动前 关联表数据改动之后 触发器 什么是触发器 触发条件 触发器语法结构 修改mysq ...
- python中symbols函数用法_Python基础之函数用法实例详解
本文以实例形式较为详细的讲述了Python函数的用法,对于初学Python的朋友有不错的借鉴价值.分享给大家供大家参考之用.具体分析如下: 通常来说,Python的函数是由一个新的语句编写,即def, ...
- fig r函数_R语言基础绘图函数散点图~跟着Nature Communications学画图~Figure1
今天继续 跟着Nature Communications学画图系列第二篇.学习R语言基础绘图函数画散点图. 对应的 Nature Communications 的论文是 Fecal pollution ...
- DbgPrint 函数流程分析
DbgPrint 函数流程分析 前言 Windows 下编写内核驱动时经常用到 DbgPrint 函数输出一些调试信息,用来辅助调试.当正在用 WinDbg 内核调试时,调试信息会输出到 WinDbg ...
- python的用途实例-Python基础之函数原理与应用实例详解
本文实例讲述了Python基础之函数原理与应用.分享给大家供大家参考,具体如下: 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体 ...
- python中使用函数的优点_Python基础之函数基本用法与进阶详解
本文实例讲述了Python基础之函数基本用法与进阶.分享给大家供大家参考,具体如下: 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数 ...
- TypeScript基础入门 - 函数 - 简介
2019独角兽企业重金招聘Python工程师标准>>> 转载 TypeScript基础入门 - 函数 - 简介 项目实践仓库 https://github.com/durban89/ ...
最新文章
- 制作Windows Mobile程序安装包
- php时间类函数吗,关于PHP 内置时间类函数的一个小问题
- 入门Python难不难?零基础到底要怎么学Python?
- jzoj3913-艰难的选择【差分,统计】
- AUTOSAR从入门到精通100讲(四十八)-Lin通信协议栈分析两步走-LinTrcvLIN Driver
- java面试没有全部答对_十道java基础面试题,你能保证全答对吗?
- Camparable与Comparator之区别
- 并不对劲的noip2018
- Lecture_2_4 线性回归中的系数,衡量了什么?
- 前端框架 Bootstrap 4.4.0 发布
- C语言练字用小软件 — Practise_Calligraphy_1.0(ANSI)
- Git(12)-- Git 分支 - 分支简介
- xposed框架android4,Xposed框架app_Xposed模块_xposed框架安卓4.4.4版-多特软件站安卓网...
- 源代码(二)_尚学堂学习
- 123457123457#0#-----com.yuming.TruckCarRun01--前拼后广--大卡车游戏cym
- Larval安装使用Excel步骤
- 如何成为有效学习的高手(许岑)——思维导图 1
- 计算机cpu特点,电脑CPU性能怎么看
- c语言的所有头文件,C语言所有头文件.doc
- Python基础从0到1自我学习(3)
热门文章
- Pgsql实现SQLServer的datediff函数
- OpenCV使用教程-读取图像imread使用说明
- eclipse如何创建多层包(多级包)
- Lucene快速入门第三讲——看看Lucene是如何支持中文分词的?
- Chatterbot 打造游戏AI客服机器人
- C与CPP后缀的文件在编译时的区别
- python后端开发面试简历_【Atman爱特曼Python后端工程师实习生面试】我是在boss直聘上投的简历,从简历筛选到拿到offer一共有如下步骤-看准网...
- php 支付宝回调验证失败,支付宝回调验证签名失败怎么解决?
- Flynn分类法 - Flynn‘s Classical Taxonomy
- 【软考学习4】计算机构成——CPU 结构、Flynn 分类法、CISC和RISC