我对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
Run Code Online (Sandbox Code Playgroud)
在功能:DisplayPath(strPath)是strPath一个局部变量?或者函数/ subs是否可以访问strPath脚本主要部分顶部定义的全局变量?
另外,Dim在我使用它们时明确使用而不仅仅定义变量有什么意义,这在脚本语言中是可能的?
Ant*_*nes 20
将strPath在DisplayPath过程将是一个新的变量,但不是你所期望的原因,有一个与你的代码微妙的问题,将模糊焦点.
调用Sub过程时,VBScript语法不包括括号.例如:-
Sub MyProc(Param1, Param2)
'' # Do stuff
End Sub
MyProc("Hello", "World")
Run Code Online (Sandbox Code Playgroud)
以上将导致语法错误.它应该被称为: -
MyProc "Hello", "World"
Run Code Online (Sandbox Code Playgroud)
现在,当只有一个参数时,不会发生语法错误.这是因为括号的另一种用法是表达式的一部分,例如'(a + b)*c'.如果是:-
DisplayPath(strPath)
Run Code Online (Sandbox Code Playgroud)
VBScript解析"表达式" (strPath)并将结果传递给DisplayPath.这个结果产生了新的存储保持结果的表达.
如果你打电话给
DisplayPath strPath
Run Code Online (Sandbox Code Playgroud)
没有新的创造.
然而呢: -
Sub DisplayPath(something)
MsgBox something
End Sub
Run Code Online (Sandbox Code Playgroud)
仍然没有分配新的存储空间. something将指向相同的记忆strPath.
编辑
以下代码有效: -
Dim strPath
strPath = "c:\folder"
Display
Sub Display()
MsgBox strPath
End Sub
Run Code Online (Sandbox Code Playgroud)
strPath程序外部的声明使其具有全球范围.
至于使用显式Dim如果上面的赋值行看起来像这样会发生什么?
strPath = "c:\folder"
Run Code Online (Sandbox Code Playgroud)
一个名为的新变量strPath将会出现并strPath保持为空.您应该始终使用以下行开始您的VBScript文件: -
Option Explicit
Run Code Online (Sandbox Code Playgroud)
这将强制您显式使用Dim所有变量,并节省您数小时的调试时间.
| 归档时间: |
|
| 查看次数: |
45351 次 |
| 最近记录: |