【问题标题】:Classic ASP variable scope - I think I have lost my mind经典的 ASP 变量范围 - 我想我已经失去了理智
【发布时间】:2012-06-01 16:02:00
【问题描述】:

自从我使用经典 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> 

如果我将声明移到块内,一切都很好。运行服务器 2008 R2,IIS 7.5。有什么改变吗?还是我?

【问题讨论】:

  • 如果答案解决了您的问题,请勾选答案和箭头下方的空 V 图标,将答案标记为已接受。此外,一般来说,除非您明确需要不同的东西,否则请始终只使用 &lt;%%&gt; - 我怀疑您是否真的需要。

标签: asp-classic iis-7.5 scope


【解决方案1】:

将您的&lt;SCRIPT LANGUAGE=vbscript RUNAT=Server&gt; 更改为&lt;%,将您的&lt;/SCRIPT&gt; 更改为%&gt;,您应该会很好。

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

为了进一步澄清,这是您开箱即用的顺序(假设 VBScript 被配置为您的默认语言):

  1. &lt;script runat="server" language="jscript" /&gt; 中包含的 JScript
  2. 内联 VBscript,包含在 &lt;% %&gt; 块中
  3. &lt;script runat="server" language="vbscript" /&gt; 中包含的 VBScript

【讨论】:

  • 哇——这很简单——对你来说:)我花了整个上午的时间!我的网站是使用 V Interdev 完成的。并且这种相同类型的代码似乎在我的其余页面中工作。我真的必须看看区别。并尝试找出它们的执行顺序。Vinterdev 将脚本块放在所有地方!谢谢,现在我可以开始了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
相关资源
最近更新 更多