日期:2014-05-16  浏览次数:20315 次

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