调用 sub() 以获取 ASP/VBscript 中的变量值

Calling a sub() to get variable values in ASP/VBscript

这可能是一个初级问题...但它让我难住了。

在 ASP/VBscript 页面的开头,我调用 sub() 来获取应用程序的一些配置值。我正在使用 sub 这样我就不需要在应用程序的每个页面上编写相同的查询来获取这些值。此 sub 包含在每个页面顶部 #included 的文件中。

我已经测试并确认 sub() 配置变量具有正确有效的值。 但是当我稍后在页面中尝试调用这些变量值时,它们是空的。

sub 上是否有某种权限设置可以使值在整个调用页面上都可以访问?

这里的问题是变量的范围。

举个例子,我们有一个名为 testvar 的变量,但它在两个不同的范围内定义,第一个在全局范围内,第二个在子过程的本地范围内。

Option Explicit
'Variable declared in the global scope will be available to any procedure
'wishing to use it.
Dim testvar: testvar = "global"

Call Test()
Call Test2()
Call Response.Write(testvar & "<br />") 'Will equal "global changed"

Sub Test()
  Call Response.Write(testvar & "<br />") 'Will equal "global"
  'Updating the global variable.
  testvar = "global changed"
End Sub

Sub Test2()
  'Variable declared in the local scope and will only be available
  'to the procedure it is declared in.
  Dim testvar: testvar = "local"
  Call Response.Write(testvar & "<br />") 'Will equal "local"
End Sub

输出:

global
local
global changed

testvar 声明定义不正确导致歧义时,这可能会造成混淆。

请记住,在 Sub / Function 中声明的变量仅可用于该 Sub / Function,不能在该 Sub / Function 范围之外使用。

在子/函数之外声明的变量也称为全局范围(如果我们开始谈论类,情况并非总是如此,但现在让我们保持简单) 可用于任何子/功能,并且可以在页面中的任何位置调用 (包括从 #include 开始,因为这只是现有页面代码的扩展).


有用的链接

  • What is the difference between Dim and Public in Classic ASP?