日期:2014-05-17  浏览次数:20777 次

问个很弱的问题,ASP变量作用域
VB code

dim x
x=request("do")
if x="1" then
    dim y
    y="1000000x=1"
    response.write("y")
elseif x="2" then
    dim y
    y="22222222222"
    response.Write("y")
elseif x="3" then
    dim y
    y="3333333333333"
    response.write("y")
end if



类似上面这段代码,一打开就提示:变量重复定义

因为每个elseif里面会有很多变量,如果每个变量都独立名字,会很痛若。。

------解决方案--------------------
dim y
只要第一个就可以了,ASP变量是全局的。除非你定义在函数或者过程中
------解决方案--------------------
ASP的 vbs中没有块级别的变量, 页面级别的全局变量可一次都定义完, 要么在函数中用局部变量。

VBScript code

<%
dim x, y
x = Trim(request("do"))
Select Case x
    Case "1" y = "1000000"
    Case "2" y = "2000000"
    Case "3" y = "3000000"
End Select
Response.Write y
%>

------解决方案--------------------
你那一整段就是一个函数 叫主函数,里面所有的变量当然要是独一无二的
要是想实现你想要的重复定义那就把每段都写成独立函数在主函数中调用

#1楼 的可以那么理解 但表述方法有待商榷 - -!
------解决方案--------------------
假如在子程序之外声明变量,那么这个变量可被 ASP 文件中的任何脚本改变。假如在子程序中声明变量,那么当子程序每次执行时,它才会被创建和撤销。

这是W3C的解释 #1楼是对的。。(看来我确实太久没ASP了 - -!)
http://www.w3school.com.cn/asp/asp_variables.asp
------解决方案--------------------
本页面。好像不能影响函数。
------解决方案--------------------
给你个例子:
dim y
y="123"
function funy()
dim y
y="456"
funy=y
end function
function suby()
suby=y
end function
response.Write "<br>y=" & y
response.Write "<br>y=" & funy()
response.Write "<br>y=" & suby()
------解决方案--------------------
您这样声明y是全局变量,在页面执行前程序第一步会打到所有的全局变量,无论的您变量是在何处声明的。