使用eval导致Google Closure Compiler压缩代码后运行出错的解决办法

最近在搞一些javascript的东西,由于系统完全是基于配置文件的,所以一些javascript的函数名或者函数代码直接写在了配置文件当中。
    //配置好的方法名
    var funcName="func1";
    
//写好的方法
    function func1(s){
        alert(s);
    }

也可能是配置为:

    var funcName="function(s){alert(s);}";

在调用的地方

    var str="Hello!";
    eval(
"("+funcName+")(str)");

正常调用没有问题,如果使用Compiler压缩后,因为str变量已经被改名,所以eval会出错。

改用:
    //var f=eval("(" + funcName + ")");
    var f=eval("(function() {return (" + funcName + ");})()");
    f.call(
this,str);

解决问题。

在chrome/firefox/opera下,直接用 eval("(" + funcName + ")") 可返回function对象,而IE下会返回 undefined 。

用 eval("(function() {return (" + funcName + ");})()"); 解决兼容性问题。

 

标签: javascript
posted @ 2009-12-09 15:16 vboy 阅读(1091) 评论(4) 编辑 收藏

 回复 引用 查看   
#1楼2009-12-09 16:46 | 风思雨      
IT之家 现在有偿征稿中,真诚邀您的加入
群号: 93700747 咨询Q:987950121

 回复 引用 查看   
#2楼2009-12-09 16:54 | Jeffrey Zhao      
eval is evil
 回复 引用 查看   
#3楼2009-12-09 16:54 | Jeffrey Zhao      
你的标题歧义很严重阿,呵呵

避免·使用eval后Google Closure Compiler压缩后的代码出错
避免使用eval后·Google Closure Compiler压缩后的代码出错

 回复 引用 查看   
#4楼[楼主]2009-12-09 17:10 | vboy      
@Jeffrey Zhao
改了,这次怎么样?

起名真是件头痛事,包括给类命名,方法命名...