2010-08-10 13 views
5

Javascript'de, eval sonuçlarını önbelleğe almak mümkün mü? Elimde olsacache eval() sonuç

Örneğin çok iyi olurdu:

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

cevap

6

Bir işlev gövdesini str yapabilir ve eval yerine New Function kullanabilirsiniz.

var fn = eval("(function(a){alert(a);})") 
+1

Bu. Dize içindeki kodun, içerdiği kodun yerel kapsamını miras almaması nedeniyle, "eval" değerinden biraz farklı olsa da. – bobince

+0

@bobince, Sadece düzenliyordum – Mic

+0

Her iki cevap da aynısını yapmak için ALMOST kullanıyormuş gibi görünüyor, harika! Tam bir yöntem olan benchamark var mı tam bir yöntem (1- Bir dizgiyle yeni fonksiyon yaratma, 2- eval a function) daha iyi? – DuduAlul

2

'eval' çağrısı sonucu javascript değerlendirmektir. Javascript (tarayıcılarda) herhangi bir 'derleme' işlevi sunmaz.

sen (eval kullanarak) alabilir en yakın:

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

Sonra sonra cached_func çağırabilir.

+1

Tarayıcınızda ne yok? – DuduAlul

+0

Google'ın V8 JavaScript motoruyla 'Script :: Compile' kullanma örneğini görmek için [buraya] bakın (http://code.google.com/apis/v8/get_started.html). – sje397

1

gibi

var fn = new Function([param1, param2,...], str); 

Ve olmak fn(p1, p2,...)

Ya eval kullanmak arayarak yeniden ve str yapmak şey asenkron alma için bir önbellek nesnesi sonucu değerlendirir ve depolayan bir işlev yapın :

var Cache = { } ; 

function evalString(string) { 

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

} 

gibi bir kod: içeriğinizi dış manipülasyon için kapıyı açmak olabileceğinden http://www.jslint.com, söyleyeceği gibi bir yan not

Cache.evalResult(/* arguments */) ; 

, "eval kötüdür". Neden ilk etapta çalışan eval'a ihtiyacınız var?

+0

Değerlendirilmesi gereken bir dizim var ... – DuduAlul