Javascript cache eval()结果
在Javascript中,是否可以缓存的结果 例如,如果我能:Javascript cache eval()结果,javascript,Javascript,在Javascript中,是否可以缓存的结果 例如,如果我能: var str="some code..."; var code = eval(str); //later on... code.reExecute(); “eval”调用的结果是评估javascript。Javascript(在浏览器中)不提供任何类型的“编译”功能 (使用eval)可以得到的最接近的结果是: 然后您可以稍后调用cached_func。您可以将str作为函数体,并使用新函数来代替eval var fn = new
var str="some code...";
var code = eval(str);
//later on...
code.reExecute();
“eval”调用的结果是评估javascript。Javascript(在浏览器中)不提供任何类型的“编译”功能 (使用eval)可以得到的最接近的结果是:
然后您可以稍后调用
cached_func
。您可以将str
作为函数体,并使用新函数来代替eval
var fn = new Function([param1, param2,...], str);
并通过调用fn(p1,p2,…)
或者使用eval,并使str
类似
var fn = eval("(function(a){alert(a);})")
生成一个函数,用于计算结果并将其存储在缓存对象中,以便异步检索:
var Cache = { } ;
function evalString(string) {
var evaluated = eval(string) ;
Cache.evalResult = evaluated ;
}
然后,您可以这样调用该代码:
Cache.evalResult(/* arguments */) ;
另一方面,“eval是邪恶的”,这将告诉你,因为它可能为你的内容的外部操纵打开大门。为什么您首先需要eval
评估它的功能?这是一个问题。虽然它与eval
略有不同,因为字符串中的代码不继承包含代码的局部范围。看起来两个答案使用的方法几乎相同,太好了!是否有任何性能基准测试哪种精确方法(1-使用字符串创建新函数,2-评估函数)更好?在JS库的第一个版本中,我从评估移动到新函数,但我没有注意到任何性能改进。但是,bobince的注释需要驱动您的选择,如果传递给函数的参数始终相同,则可以使用新函数,否则使用eval。您确定要使用eval吗?在当前版本的《纯洁》中,我们通过更努力的尝试,压制了这两种邪恶的方法。好啊这是另一个争论:)请参阅使用谷歌V8 JavaScript引擎的Script::Compile
示例。
Cache.evalResult(/* arguments */) ;