Dim的位置是否重要?

时间:2016-07-04 09:25:18

标签: vbscript scope

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

Option Explicit

x = "before Dim"
WScript.Echo x

Dim x
x = "after Dim"
WScript.Echo x

同样适用于SubFunction

显然,Dim在哪一行上无关紧要,只要它在同一范围内(当前Function / Sub或全局)。我想知道为什么会这样。微软的documentation明确表示(强调我的):

  

脚本级变量的生命周期从开始   声明直到脚本运行完毕。

我读到这个:首先Dim然后使用。但是我错了...?这是为什么?!

VB6 允许这样做:

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

Variable not defined
---------------------------
OK   Help   
---------------------------

1 个答案:

答案 0 :(得分:8)

摘录是契约,你必须遵循,因为我们不依赖于实现。对于您的一般信息声明被提升到顶部。 Eric Lippert wrote

  

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

     

这是怎么回事?好吧,让我问你一下 - 如果你这么想的话   看起来很奇怪,为什么你认为这看起来很正常?

Dim s
s = Foo(123)
Function Foo(x)
  Foo = x + 345
End Function
     

该函数在声明之前正在使用,但是   不会惹你生气,对吗?

     

同样,变量可以在声明之前使用。该   行为是设计的。变量声明和函数是   在VBScript和VBScript中,逻辑上“悬挂”到其范围的顶部   JScript中。

修改

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

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