在Javascript中,是否可以缓存eval
的结果?
例如,如果我可以,那就太棒了:
var str="some code...";
var code = eval(str);
//later on...
code.reExecute();
答案 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
首先发挥作用呢?