1

古典的な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 を実行しています。何か変わった?それとも私ですか?

4

1 に答える 1

5

<SCRIPT LANGUAGE=vbscript RUNAT=Server>あなたを a<%に、あなた</SCRIPT>をa に変更すると%>、うまくいくはずです。

従来の ASP のライフ サイクル中にスクリプト エンジンが実行される順序に悩まされています。紛らわしいですが、ソースの順序で最初に来ても、ブロックはブロック<SCRIPT />の後に実行されます。関数がブロックで<% %>定義されている理由を簡単に説明することはできませんが、関数の巻き上げに関係していると思います。<% %>

さらに明確にするために、これは箱から出してすぐに使える順序です (VBScript が既定の言語として構成されていると仮定します)。

  1. に含まれる JScript<script runat="server" language="jscript" />
  2. <% %>ブロックに含まれるインライン VBscript
  3. に含まれる VBScript<script runat="server" language="vbscript" />
于 2012-05-12T16:55:50.827 に答える