Javascript中的eval函数 动态执行
Javascript中的eval函数 动态执行?
声明:该文章从CSDN转载过来
地址为:http://blog.csdn.net/cb_121/archive/2008/07/27/2718864.aspx
?
?
发现为本文起一个合适的标题还不是那么容易,呵呵,所以在此先说明下本
文的两个目的:
(1)介绍javascript中的eval函数的用法
(2)如何在函数内执行全局代码
?先来说eval的用法,内容比较简单,熟悉的可以跳过。
? ?
eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。
?
? 需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会返回值,简单示例如下:
var
?code1
=
'"a"?+?2'
;
????
//表
达式
var
?code2
=
'{a:2}'
;
??????
//语句
alert
(
eval
(
code1
));
?????
//->'a2'
alert
(
eval
(
code2
));
?????
//->undefined
alert
(
eval
(
'('?
+?
code2?
+?
')'
));
??
??//->[object?Object] 例如JSON 对象就是利用这个
???
可以看到,对于对象声明语句来说,仅仅是执行,并不能返回值。为了返回常用的“{}”这样的对象声明语句,必须用括号括住,以将其转换为表达式,才能返回
其值。这也是使用JSON
来
进行Ajax开发的基本原理之一。在例子中可以清楚的看到,第二个alert语句输出的是undefined,而第三个加了括号后输出的是语句表示的对
象。
?现在来说本文的重点,如何在函数内执行全局代码。
??
为了说明这个问题,先看一个例子:
var
?s
=
'global'
;
????
//定
义一个全局变量
function
?demo1
(){
????eval
(
'var?s="local"'
);
}
demo1
();
alert
(
s
);
????//->global