欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP Eval、Execute、ExecuteGlobal区别分析

程序员文章站 2022-04-14 19:00:49
eval 计算一个表达式的值并返回结果。 语法:[result = ]eval_r(expression_r) expression_r 为任意有效 vbscript 表达...
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 中,总是表示赋值。