在Javascript中,有没有可能缓存eval
的结果?缓存eval()结果
例如,它想如果我可以是伟大的:
var str="some code...";
var code = eval(str);
//later on...
code.reExecute();
在Javascript中,有没有可能缓存eval
的结果?缓存eval()结果
例如,它想如果我可以是伟大的:
var str="some code...";
var code = eval(str);
//later on...
code.reExecute();
您可以制作str
函数的主体并使用New Function
而不是eval
。
var fn = new Function([param1, param2,...], str);
,并通过调用fn(p1, p2,...)
或者使用eval重用,并str
是这样
var fn = eval("(function(a){alert(a);})")
的“EVAL”调用的结果是评价的JavaScript。 Javascript(在浏览器中)不提供任何“编译”功能。
你可以得到(使用eval)最接近的是:
var cached_func = eval('function() {' + str + '}');
然后,您可以稍后致电该cached_func
。
请在缓存对象异步检索评估,并将结果存储功能:
var Cache = { } ;
function evalString(string) {
var evaluated = eval(string) ;
Cache.evalResult = evaluated ;
}
然后您可以致电像这样的代码:
Cache.evalResult(/* arguments */) ;
在一个侧面说明,“EVAL是邪恶的”为http://www.jslint.com会告诉你,因为它可能打开门为您的内容外部操作。为什么你需要eval
这个功能呢?
我有一个字符串必须被评估... – DuduAlul 2010-08-10 10:02:36
这个。虽然它与'eval'稍有不同,因为字符串中的代码不会继承包含代码的本地范围。 – bobince 2010-08-10 09:41:08
@bobince,我只是编辑它 – Mic 2010-08-10 09:43:23
看起来好像两个答案使用几乎相同的方式来做到这一点,太棒了!是否有任何性能benchamark确切的方法(1-创建一个字符串的新功能,2 eval一个函数)更好? – DuduAlul 2010-08-10 09:44:44