ASP Eval、Execute、ExecuteGlobal區(qū)別分析
Eval 計算一個表達(dá)式的值并返回結(jié)果。
語法:[result = ]eval_r(expression_r)
expression_r 為任意有效 VBScript 表達(dá)式的字符串
示例:
response.Write(eval_r("3+2")) '輸出 5
"3+2" 使用引號括起來,表示是一個字符串,但是在 Eval “眼里”,把它當(dāng)作一個表達(dá)式 3+2 來執(zhí)行。
<% a=1 b=2 response.write "a+b" '會直接輸出 a+b response.write eval("a+b") '會計算具體的結(jié)果 輸出3 '在使用eval的時候,eval會盡可的把內(nèi)容里的換成程序里出現(xiàn)的變量,然后計算出結(jié)果并返回 %>
Execute 執(zhí)行一個或多個指定的語句。多個語句間用冒號(:)隔開。
execute : 用來執(zhí)行一句或多句的代碼,不一定有返回的結(jié)果
語法:Execute statements
示例:
Execute "response.Write(""abc"")" '輸出 abc
"response.Write(""abc"")" 使用引號括起來,表示是一個字符串
但是在 Execute “眼里”,把它當(dāng)作一個語句 response.Write("abc") 來執(zhí)行。
'比如我們有時候需要動態(tài)聲明一個或多個的變量: Dim Str : Str="UserName,Password,LoginTime" execute("Dim "&Str)
有的人可能要說了,在ASP里,變量聲明不聲明其實(shí)區(qū)別不大的,但實(shí)際上不是這樣的,比如下面這樣一段代碼:
<% Sub GetData() UserName="腳本之家" LoginTime="2020-3-29" End Sub Dim UserName,LoginTime '先聲明變量 Call GetData() '再調(diào)用sub過程 Response.write UserName '這時才能輸出具體的值,如果不事先聲明變量的話,就會輸出空 %>
再來看一個具體的實(shí)例,了解eval和execute的區(qū)別和用法:
第一個實(shí)例:
'假如我們有這樣一個sub過程: Sub OutTime() response.write now() End Sub '那么在我們要動態(tài)調(diào)用這個SUB過程的時候,只能用execute: execute("OutTime") '或者 execute("OutTime()") '如果在這個時候用eval,就會報錯,因?yàn)镺utTime過程里,沒有返回值
第二個實(shí)例:
Function GetTime() GetTime=now() End Function '上面這個函數(shù),我們要動態(tài)調(diào)用的話,只能用eval,如果用execute,不會報錯,但也獲取不到具體的內(nèi)容: execute("GetTime()") response.write execute("GetTime()") '上面這兩種寫法,站長都已親測,輸出的都是空白 response.write eval("GetTime()") response.write eval("GetTime") '上面這兩種寫法 才能正確的輸出內(nèi)容
ExecuteGlobal 在全局名字空間中執(zhí)行一個或多個指定的語句。
語法:ExecuteGlobal statement
示例:
dim c c = "全局變量" sub S1() dim c c = "局部變量" Execute "response.Write(c)" '輸出 局部變量 ExecuteGlobal "response.Write(c)" '輸出 全局變量 end sub Execute "response.Write(c)" '輸出 全局變量 call S1()
變量 c 既在全局范圍內(nèi)定義,也在函數(shù)范圍內(nèi)定義,Execute 按自己所處的位置來決定使用局部變量還是全局變量,而 ExecuteGlobal 則始終只認(rèn)全局范圍的 c。
總結(jié):
Eval
只執(zhí)行一個語句 語句可以有也可以沒有返回值
Execute
執(zhí)行一個或多個語句 忽略語句的返回值
ExecuteGlobal
執(zhí)行一個或多個語句 忽略語句的返回值 全局變量和局部變量同名時總是使用全局變量
注意:
在 VBScript 中“賦值”與“比較”都是使用“=”,比如“a=b”既可以說是將 b 值賦予 a,也可以說是判斷 a 與 b 是否相等,那么 eval_r("a=b") 是表示賦值還是比較運(yùn)算呢?
這里有個約定,在 Eval 中,“a=b”總是表示比較運(yùn)算,在 Execute 和 ExecuteGlobal 中,總是表示賦值。
相關(guān)文章
asp教程中g(shù)et post提交表單有5點(diǎn)區(qū)別
asp教程中g(shù)et post提交表單有5點(diǎn)區(qū)別分別以HTTP請求,表單兩者分別介紹,需要的朋友可以了解下2012-12-12關(guān)于ASP生成偽參數(shù)技巧 簡潔實(shí)用的偽(僞)參數(shù)
關(guān)于ASP生成偽參數(shù)技巧 簡潔實(shí)用的偽(僞)參數(shù)...2007-11-11