在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