cache eval()结果

时间:2010-08-10 09:33:22

标签: javascript

在Javascript中,是否可以缓存eval的结果?

例如,如果我可以,那就太棒了:

var str="some code...";
var code = eval(str);
//later on...
code.reExecute();

3 个答案:

答案 0 :(得分:6)

您可以str使用New Function函数的正文,并使用eval代替var fn = new Function([param1, param2,...], str);

fn(p1, p2,...)

通过调用str

重复使用它

或者使用eval,并使var fn = eval("(function(a){alert(a);})") 类似

{{1}}

答案 1 :(得分:2)

'eval'调用的结果是评估javascript。 Javascript(在浏览器中)不提供任何类型的“编译”功能。

你可以得到的最接近的(使用eval)是:

var cached_func = eval('function() {' + str + '}');

然后您可以稍后致电cached_func

答案 2 :(得分:1)

创建一个函数,用于计算结果并将结果存储在缓存对象中以进行异步检索:

 var Cache = { } ;

 function evalString(string) {

     var evaluated = eval(string) ;
         Cache.evalResult = evaluated ;

 }

然后您可以像这样调用该代码:

 Cache.evalResult(/* arguments */) ;

在旁注中,“eval是邪恶的”正如http://www.jslint.com所告诉你的那样,因为它可能为外部操纵你的内容打开了大门。你为什么需要eval首先发挥作用呢?