- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) > ASP >
- ASP Eval、Execute、ExecuteGlobal區別分析
Eval 計算一個(gè)表達式的值并返回結果。
語(yǔ)法:[result = ]eval_r(expression_r)
expression_r 為任意有效 VBScript 表達式的字符串
示例:
response.Write(eval_r("3+2")) '輸出 5
"3+2" 使用引號括起來(lái),表示是一個(gè)字符串,但是在 Eval “眼里”,把它當作一個(gè)表達式 3+2 來(lái)執行。
<% a=1 b=2 response.write "a+b" '會(huì )直接輸出 a+b response.write eval("a+b") '會(huì )計算具體的結果 輸出3 '在使用eval的時(shí)候,eval會(huì )盡可的把內容里的換成程序里出現的變量,然后計算出結果并返回 %>
Execute 執行一個(gè)或多個(gè)指定的語(yǔ)句。多個(gè)語(yǔ)句間用冒號(:)隔開(kāi)。
execute : 用來(lái)執行一句或多句的代碼,不一定有返回的結果
語(yǔ)法:Execute statements
示例:
Execute "response.Write(""abc"")" '輸出 abc
"response.Write(""abc"")" 使用引號括起來(lái),表示是一個(gè)字符串
但是在 Execute “眼里”,把它當作一個(gè)語(yǔ)句 response.Write("abc") 來(lái)執行。
'比如我們有時(shí)候需要動(dòng)態(tài)聲明一個(gè)或多個(gè)的變量: Dim Str : Str="UserName,Password,LoginTime" execute("Dim "&Str)
有的人可能要說(shuō)了,在A(yíng)SP里,變量聲明不聲明其實(shí)區別不大的,但實(shí)際上不是這樣的,比如下面這樣一段代碼:
<% Sub GetData() UserName="腳本之家" LoginTime="2020-3-29" End Sub Dim UserName,LoginTime '先聲明變量 Call GetData() '再調用sub過(guò)程 Response.write UserName '這時(shí)才能輸出具體的值,如果不事先聲明變量的話(huà),就會(huì )輸出空 %>
再來(lái)看一個(gè)具體的實(shí)例,了解eval和execute的區別和用法:
第一個(gè)實(shí)例:
'假如我們有這樣一個(gè)sub過(guò)程: Sub OutTime() response.write now() End Sub '那么在我們要動(dòng)態(tài)調用這個(gè)SUB過(guò)程的時(shí)候,只能用execute: execute("OutTime") '或者 execute("OutTime()") '如果在這個(gè)時(shí)候用eval,就會(huì )報錯,因為OutTime過(guò)程里,沒(méi)有返回值
第二個(gè)實(shí)例:
Function GetTime() GetTime=now() End Function '上面這個(gè)函數,我們要動(dòng)態(tài)調用的話(huà),只能用eval,如果用execute,不會(huì )報錯,但也獲取不到具體的內容: execute("GetTime()") response.write execute("GetTime()") '上面這兩種寫(xiě)法,站長(cháng)都已親測,輸出的都是空白 response.write eval("GetTime()") response.write eval("GetTime") '上面這兩種寫(xiě)法 才能正確的輸出內容
ExecuteGlobal 在全局名字空間中執行一個(gè)或多個(gè)指定的語(yǔ)句。
語(yǔ)法: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 既在全局范圍內定義,也在函數范圍內定義,Execute 按自己所處的位置來(lái)決定使用局部變量還是全局變量,而 ExecuteGlobal 則始終只認全局范圍的 c。
總結:
Eval
只執行一個(gè)語(yǔ)句 語(yǔ)句可以有也可以沒(méi)有返回值
Execute
執行一個(gè)或多個(gè)語(yǔ)句 忽略語(yǔ)句的返回值
ExecuteGlobal
執行一個(gè)或多個(gè)語(yǔ)句 忽略語(yǔ)句的返回值 全局變量和局部變量同名時(shí)總是使用全局變量
注意:
在 VBScript 中“賦值”與“比較”都是使用“=”,比如“a=b”既可以說(shuō)是將 b 值賦予 a,也可以說(shuō)是判斷 a 與 b 是否相等,那么 eval_r("a=b") 是表示賦值還是比較運算呢?
這里有個(gè)約定,在 Eval 中,“a=b”總是表示比較運算,在 Execute 和 ExecuteGlobal 中,總是表示賦值。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站