调用sub()来获取ASP / VBscript

时间:2016-05-22 14:48:45

标签: function vbscript asp-classic

这可能是一个基本问题......但它让我感到难过。

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

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

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

1 个答案:

答案 0 :(得分:3)

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

举个例子,我们有一个名为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的范围之外使用。

在Sub / Function之外声明的变量也称为全局范围(如果我们开始讨论Classes,情况并非如此,但现在让它保持简单)可用于任何Sub / Function并且可以在页面中的任何位置调用(包括来自#include,因为这只是现有页面代码的扩展名)

有用的链接