Eval、Execute、ExecuteGlobal 這三個語句(函數)都是執行字串表達式,不過它們之間又有所不同。 Eval 計算一個表達式的值並傳回結果。
語法:[result = ]eval_r(expression_r)
expression_r 為任意有效VBScript 表達式的字串
範例:
複製代碼代碼如下:
response.Write(eval_r(3+2)) '輸出5
3+2 使用引號括起來,表示是一個字串,但是在Eval 眼裡,把它當作一個表達式3+2 來執行。
Execute 執行一個或多個指定的語句。多個語句間用冒號(:)隔開。
語法:Execute statements
範例:
Execute response.Write(abc) '輸出abc
複製程式碼
response.Write(abc) 使用引號括起來,表示是一個字串
但在Execute 眼裡,把它當作一個語句response.Write(abc) 來執行。
ExecuteGlobal 在全域名字空間中執行一個或多個指定的語句。
語法: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 會依照自己所處的位置決定使用局部變數還是全域變量,而ExecuteGlobal 總是只認全域範圍的c。
總結:
Eval 只執行一個語句語句可以有或沒有回傳值
Execute 執行一個或多個語句忽略語句的回傳值
ExecuteGlobal 執行一個或多個語句忽略語句的傳回值全域變數和局部變數同名時總是使用全域變量
注意:
在VBScript 中賦值與比較都是使用=,例如a=b可以說是將b 值賦予a,也可以說是判斷a 與b 是否相等,那麼eval_r(a=b) 是表示賦值還是比較運算呢?
這裡有個約定,在Eval 中,a=b總是表示比較運算,在Execute 和ExecuteGlobal 中,總是表示賦值。