程序阶层变量
所谓程序阶层变量,就是在程序内宣告的变量。以前我们在sub 或是function 中宣告的变量,都是程序阶层的变量;也就是区域变量。程序阶层变量在程序执行时被宣告产生,而程序执行完毕后也同时被毁灭;也就是说其它的事件程序无法使用这个变量,因为它已经被毁灭了。下列范例宣告了一个程序阶层变量,并尝试在另外一个程序中将其它程序阶层的变量显示出来:
<html>
<script language="vb" runat="server">
sub page_init(sender as object, e as eventargs)
dim strtest as string '宣告程序阶层的变量
strtest = "这是程序阶层的变量"
end sub
sub page_load(sender as object, e as eventargs)
response.write(strtest) '这里没有宣告strtest 变量, 就是object 型态
end sub
</script>
</html>
上述范例变量strtest 在page_init 事件中被宣告,并指定其内容。不过由于该变量是属于程序阶层的变量,所以在page_init 事件程序执行完毕后即被消灭。因为在page_load 事件程序中要显示变量strtest 时,由于strtest 早已被消灭,所以这里的strtest 变量也是page_load 程序阶层的变量,对于没有宣告型态的变量就是object 型态,无法显示任何的讯息。
网页阶层变数
而网页阶层的变量则是网页在加载执行时,会先读取网页阶层宣告区中的宣告,所有在网页阶层宣告区中宣告的变量都视为网页阶层变量; 网页阶层变量在网页执行时先被宣告产生,在网页执行完毕后才会被毁灭。所谓网页阶层的宣告区,就是在程序外面,<script> </script> 之内的地方。为了程序的可读性,我们习惯在<script> </script> 标注中前面区域进行网页阶层的变量宣告。下列范例宣告了一个网页阶层变量strmsg:
<script language="vb" runat="server">
dim strmsg as string '网页阶层的宣告区
sub page_load(sender as object, e as eventargs)
...
end sub
</script>
网页阶层变量以及程序阶层变量的生命周期,如下插图所示:

我们知道网页开始执行时会先触发page_init 事件,接着再触发page_load 事件,所以我们利用这两个事件来作一个简单的试验。首先我们在网页阶层的宣告区中宣告了一个变量strmsg,另外在page_init 事件程序中宣告了一个strtest 变量;所以strmsg 为网页阶层变量,而strtest为则为程序阶层变量,如下程序所示:
<html>
<asp:label id="label1" runat="server"/>
<asp:label id="label2" runat="server"/>
<script language="vb" runat="server">
dim strmsg as string '宣告网页阶层的变量
sub page_init(sender as object, e as eventargs)
dim strtest as string '宣告程序阶层的变量
strmsg = "这是窗体阶层的变量"
strtest = "这是程序阶层的变量"
end sub
sub page_load(sender as object, e as eventargs)
label1.text=strmsg
label2.text=strtest '这里没有宣告strtest 变量, 就是object 型态
end sub
</script>
</html>
上述范例的执行结果,只显示网页阶层变量的内容。这是因为在执行page_load 事件程序的时候,由于strtest 是在page_init 事件程序中宣告的,所以page_init 程序在执行完毕时立即将程序阶层变量strtest 毁灭,执行到page_load 事件程序时当然读取不到strtest 这个程序阶层变量。而strmsg 是在网页阶层宣告区中宣告的,在网页的所有程序执行完毕后才会被毁灭,所以在page_load 事件程序中还是可以读到strmsg 的内容。