经典的ASP变量范围 - 我想我已经失去了理智

时间:2012-05-12 16:47:36

标签: asp-classic iis-7.5 scope

自从我使用经典的asp之后已经有一段时间了,我对可变范围有完全的大脑褪色。

我在这里做错了什么?

<SCRIPT LANGUAGE=vbscript RUNAT=Server>
dim test
test = "Test it"

function testAsp()
   testasp = "Should be a result here " & test
end function
</SCRIPT>

<html>
<body>
<%
   response.write(testAsp())
%>
</body>
</html> 

如果我在块内移动声明一切都很好。运行server 2008 R2,IIS 7.5。有什么变化吗?或者是我?

1 个答案:

答案 0 :(得分:4)

将您的<SCRIPT LANGUAGE=vbscript RUNAT=Server>更改为<%,将</SCRIPT>更改为%>,您应该感觉良好。

您会遇到脚本引擎在经典ASP生命周期中执行的顺序。这很令人困惑,但<SCRIPT />块将在<% %>块之后执行,即使它首先按源的顺序排在第一位。我无法解释为什么函数在<% %>块中定义,但我希望它与函数提升有关。

为了进一步说明,这是您开箱即用的订单(假设VBScript配置为您的默认语言):

  1. <script runat="server" language="jscript" />
  2. 中包含的JScript
  3. 内联VBscript,包含在<% %>
  4. <script runat="server" language="vbscript" />
  5. 中包含的VBScript