我对VBScript中的变量范围有疑问。我知道有以下关键字(来自autoitscript.com):
想象一下,我有以下.vbs文件:
Dim strPath
strPath = "C:\folder"
DisplayPath strPath
Sub DisplayPath(strPath) 'Does this strPath get it's own local scope?
MsgBox strPath
End Sub
在函数中:DisplayPath(strPath)
,strPath
是本地变量吗?或者函数/子函数是否可以访问脚本主要部分顶部定义的strPath
作为全局变量?
此外,明确使用Dim
与仅使用它们定义变量有什么意义,这在脚本语言中是可能的?
答案 0 :(得分:20)
strPath
程序中的DisplayPath
将是一个新变量,但不是出于您预期的原因,您的代码会出现微妙的问题,这会使问题浮现。
调用Sub
过程时,VBScript语法不包括括号。例如: -
Sub MyProc(Param1, Param2)
'' # Do stuff
End Sub
MyProc("Hello", "World")
以上会导致语法错误。它应该被称为: -
MyProc "Hello", "World"
现在,只有一个参数时,不会发生语法错误。这是因为括号的另一种用法是表达的一部分,例如'(a + b)* c'。在以下情况下: -
DisplayPath(strPath)
VBScript解析“表达式”(strPath)
并将结果传递给DisplayPath
。它的这个结果会产生新的存储结果。
你打电话给
DisplayPath strPath
没有新创建。
然而呢: -
Sub DisplayPath(something)
MsgBox something
End Sub
仍然没有分配新的存储空间。 something
将指向strPath
所做的同一记忆。
修改强>
以下代码有效: -
Dim strPath
strPath = "c:\folder"
Display
Sub Display()
MsgBox strPath
End Sub
在程序之外声明strPath
会导致它具有全局范围。
关于使用显式Dim
的问题如果上面的赋值行看起来像这样会发生什么?
strPath = "c:\folder"
一个名为strPath
的新变量将会出现,strPath
将保持为空。您应该始终使用以下行开始您的VBScript文件: -
Option Explicit
这将强制您明确Dim
要使用的所有变量,并且可以节省您数小时的调试时间。