VBScript函数中的变量范围
我对VBScript中的变量范围有一个问题。我知道有以下关键词(来自):VBScript函数中的变量范围,vbscript,scope,Vbscript,Scope,我对VBScript中的变量范围有一个问题。我知道有以下关键词(来自): Dim=局部范围,如果变量名在全局范围内不存在(在这种情况下,它将重用全局变量!) Global=强制在全局范围内创建变量 局部=强制在局部/函数范围内创建变量 假设我有以下.vbs文件: Dim strPath strPath = "C:\folder" DisplayPath strPath Sub DisplayPath(strPath) 'Does this strPath get it's own loca
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
与仅在脚本语言中定义变量相比有什么意义?在DisplayPath
过程中的strPath
将是一个新变量,但不是出于您预期的原因,您的代码中有一个微妙的问题,它会使问题变得模糊
调用Sub
过程时,VBScript语法不包括括号。例如:-
Sub MyProc(Param1, Param2)
'' # Do stuff
End Sub
MyProc("Hello", "World")
上述操作将导致语法错误。应称之为:-
MyProc "Hello", "World"
现在,当只有一个参数时,不会发生语法错误。这是因为括号的另一种用法是作为表达式的一部分,例如“(a+b)*c”。在下列情况下:-
DisplayPath(strPath)
VBScript解析“表达式”(strPath)
,并将结果传递给显示路径
。正是这个结果产生了新的存储保持结果表达式
你打电话给我了吗
DisplayPath strPath
没有新的创建
然而,这又如何呢:-
Sub DisplayPath(something)
MsgBox something
End Sub
仍然没有分配新的存储<代码>某些内容将指向与strPath相同的内存
编辑
以下代码有效:-
Dim strPath
strPath = "c:\folder"
Display
Sub Display()
MsgBox strPath
End Sub
过程外部的strPath
声明使其具有全局作用域
至于使用显式Dim
的点,如果上面的赋值行看起来像这样,会发生什么
strPath = "c:\folder"
一个名为strPath
的新变量将出现,strPath
将保持为空。您应该始终以以下行开始VBScript文件:-
Option Explicit
这将迫使您显式地
Dim
所有要使用的变量,并将为您节省数小时的调试时间。非常有用,+1,谢谢。我很高兴您澄清了按引用传递和按值传递(以及创建新存储)之间的区别。然而,我还想知道的是strPath
是否是全局的,并且脚本中的所有函数/子函数都可以访问,即使我没有将它们作为局部函数变量传入。非常重要的观察,今天为我节省了一些时间!!关于括号的简单语法错误,我可以使用调用MyProc(“Hello”,“World”)
轻松解决。