Dim的位置是否重要?

Mic*_*ter 3 vbscript scope

我注意到使用它之后我可以Dim使用变量,或者(换句话说)在使用之前使用它,即使在使用时也是如此.试试这个:DimOption Explicit

Option Explicit

x = "before Dim"
WScript.Echo x

Dim x
x = "after Dim"
WScript.Echo x
Run Code Online (Sandbox Code Playgroud)

同样在a SubFunction.

显然,不要紧上线的Dim是,只要是在同一范围内(电流Function/ Sub或全球).我想知道为什么会这样.微软的文档明确说明(强调我的):

脚本级变量的生命周期从声明的时间延长到脚本完成运行的时间.

我读的就像:先Dim使用.但是我错了...?为什么是这样?!

VB6也不会允许这样的:

---------------------------
Microsoft Visual Basic
---------------------------
Compile error:

Variable not defined
---------------------------
OK   Help   
---------------------------
Run Code Online (Sandbox Code Playgroud)

小智 8

摘录是合同以及您必须遵循的内容,因为我们不依赖于实现.对于您的一般信息声明被提升到顶部.Eric Lippert 写道:

为什么我们可以在VBScript中声明它之前使用变量?...

那是怎么回事?好吧,让我问你这个问题 - 如果你认为这看起来很奇怪,为什么你认为这看起来很正常?

Dim s
s = Foo(123)
Function Foo(x)
  Foo = x + 345
End Function
Run Code Online (Sandbox Code Playgroud)

函数在声明之前就被使用了,但这不会给你带来麻烦,对吧?

同样,变量可以在声明之前使用.行为是设计的.在VBScript和JScript中,变量声明和函数在逻辑上"悬挂"到其作用域的顶部.

编辑

VBScript尽可能遵循VBA规则.这是实现VBA的实现文档.对于VBS/VBA程序员,它仅供参考.

https://msdn.microsoft.com/en-us/library/dd361851.aspx