文章目录

  • 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 关键字来识别的。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 的语句,这意味着不能强行跳出循环

VBScript基础,变量,函数,流程相关推荐

  1. MySql基础篇---004 其它数据库对象篇:视图,存储过程与函数,变量、流程控制与游标 ,触发器

    第14章_视图 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 常见的数据库对象 对象 描述 表(TABLE) 表是存储数据的逻辑单元,以行和列的形 ...

  2. Activiti7工作流引擎:基础篇(七) 流程变量

    不要指望别人能帮你多少,人生事事物物都得靠自己. 一:简介 流程变量就是if(条件)中使用到的变量用于参与条件表达式的计算. 变量都是有作用域的,在程序中方法内部的变量是属于局部变量,方法外的变量属于 ...

  3. MySQL-视图-触发器-事务-存储过程-函数-流程控制-索引与慢查询优化-06

    目录 视图*** 什么是视图 为什么要用视图 如何生成视图 修改视图 --> 最好(千万)不要 关联表数据改动前 关联表数据改动之后 触发器 什么是触发器 触发条件 触发器语法结构 修改mysq ...

  4. python中symbols函数用法_Python基础之函数用法实例详解

    本文以实例形式较为详细的讲述了Python函数的用法,对于初学Python的朋友有不错的借鉴价值.分享给大家供大家参考之用.具体分析如下: 通常来说,Python的函数是由一个新的语句编写,即def, ...

  5. fig r函数_R语言基础绘图函数散点图~跟着Nature Communications学画图~Figure1

    今天继续 跟着Nature Communications学画图系列第二篇.学习R语言基础绘图函数画散点图. 对应的 Nature Communications 的论文是 Fecal pollution ...

  6. DbgPrint 函数流程分析

    DbgPrint 函数流程分析 前言 Windows 下编写内核驱动时经常用到 DbgPrint 函数输出一些调试信息,用来辅助调试.当正在用 WinDbg 内核调试时,调试信息会输出到 WinDbg ...

  7. python的用途实例-Python基础之函数原理与应用实例详解

    本文实例讲述了Python基础之函数原理与应用.分享给大家供大家参考,具体如下: 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体 ...

  8. python中使用函数的优点_Python基础之函数基本用法与进阶详解

    本文实例讲述了Python基础之函数基本用法与进阶.分享给大家供大家参考,具体如下: 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数 ...

  9. TypeScript基础入门 - 函数 - 简介

    2019独角兽企业重金招聘Python工程师标准>>> 转载 TypeScript基础入门 - 函数 - 简介 项目实践仓库 https://github.com/durban89/ ...

最新文章

  1. 制作Windows Mobile程序安装包
  2. php时间类函数吗,关于PHP 内置时间类函数的一个小问题
  3. 入门Python难不难?零基础到底要怎么学Python?
  4. jzoj3913-艰难的选择【差分,统计】
  5. AUTOSAR从入门到精通100讲(四十八)-Lin通信协议栈分析两步走-LinTrcvLIN Driver
  6. java面试没有全部答对_十道java基础面试题,你能保证全答对吗?
  7. Camparable与Comparator之区别
  8. 并不对劲的noip2018
  9. Lecture_2_4 线性回归中的系数,衡量了什么?
  10. 前端框架 Bootstrap 4.4.0 发布
  11. C语言练字用小软件 — Practise_Calligraphy_1.0(ANSI)
  12. Git(12)-- Git 分支 - 分支简介
  13. xposed框架android4,Xposed框架app_Xposed模块_xposed框架安卓4.4.4版-多特软件站安卓网...
  14. 源代码(二)_尚学堂学习
  15. 123457123457#0#-----com.yuming.TruckCarRun01--前拼后广--大卡车游戏cym
  16. Larval安装使用Excel步骤
  17. 如何成为有效学习的高手(许岑)——思维导图 1
  18. 计算机cpu特点,电脑CPU性能怎么看
  19. c语言的所有头文件,C语言所有头文件.doc
  20. Python基础从0到1自我学习(3)

热门文章

  1. Pgsql实现SQLServer的datediff函数
  2. OpenCV使用教程-读取图像imread使用说明
  3. eclipse如何创建多层包(多级包)
  4. Lucene快速入门第三讲——看看Lucene是如何支持中文分词的?
  5. Chatterbot 打造游戏AI客服机器人
  6. C与CPP后缀的文件在编译时的区别
  7. python后端开发面试简历_【Atman爱特曼Python后端工程师实习生面试】我是在boss直聘上投的简历,从简历筛选到拿到offer一共有如下步骤-看准网...
  8. php 支付宝回调验证失败,支付宝回调验证签名失败怎么解决?
  9. Flynn分类法 - Flynn‘s Classical Taxonomy
  10. 【软考学习4】计算机构成——CPU 结构、Flynn 分类法、CISC和RISC