自从我使用经典的 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>
Run Code Online (Sandbox Code Playgroud)
如果我在块内移动声明,一切都很好。运行服务器 2008 R2,IIS 7.5。有什么改变吗?或者是我吗?
将您的更改<SCRIPT LANGUAGE=vbscript RUNAT=Server>为 a<%并将您的更改</SCRIPT>为 a %>,您应该会很好。
您会被经典 ASP 生命周期中脚本引擎的执行顺序所吸引。这很令人困惑,但是该<SCRIPT />块将在该<% %>块之后执行,即使它按照源的顺序排在最前面。我无法轻易解释为什么在<% %>块中定义函数,但我认为它与函数提升有关。
为了进一步澄清,这是您开箱即用的顺序(假设 VBScript 被配置为您的默认语言):
<script runat="server" language="jscript" /><% %>块中<script runat="server" language="vbscript" />