W JavaScript, możliwe jest buforowanie wyników eval
?cache eval() wynik
Na przykład byłoby wspaniale, gdybym mógł:
var str="some code...";
var code = eval(str);
//later on...
code.reExecute();
W JavaScript, możliwe jest buforowanie wyników eval
?cache eval() wynik
Na przykład byłoby wspaniale, gdybym mógł:
var str="some code...";
var code = eval(str);
//later on...
code.reExecute();
Można wykonać str
treść funkcji i użyć New Function
zamiast eval
.
var fn = new Function([param1, param2,...], str);
i ponownego wykorzystania go przez wywołanie fn(p1, p2,...)
lub użyć eval i dokonać str
być coś
var fn = eval("(function(a){alert(a);})")
Wynik „eval” zaproszenia jest ocenić JavaScript. JavaScript (w przeglądarkach) nie oferuje żadnej funkcji "kompilacji".
Najbliżej można dostać (za pomocą eval) wynosi:
var cached_func = eval('function() {' + str + '}');
Następnie można wywołać cached_func
później.
Dodać funkcję, która ocenia i zapisuje wynik w obiekcie cache do wyszukiwania asynchronicznym :
var Cache = { } ;
function evalString(string) {
var evaluated = eval(string) ;
Cache.evalResult = evaluated ;
}
Możesz wtedy zadzwonić że kod tak:
Cache.evalResult(/* arguments */) ;
Na marginesie, „eval jest zły”, jak http://www.jslint.com powie, ponieważ może otworzyć drzwi dla zewnętrznej manipulacji treści. Dlaczego musisz eval
, który to działa na pierwszym miejscu?
Mam ciąg znaków, który należy poddać ocenie ... – DuduAlul
To. Chociaż różni się nieco od 'eval' w tym, że kod w łańcuchu nie dziedziczy zakresu lokalnego kodu zawierającego. – bobince
@bobince, właśnie edytowałem to – Mic
Wydaje się, że obie odpowiedzi używają PRAWIE w ten sam sposób, aby to zrobić, wspaniale! Czy jest jakaś benchamark wydajności, która jest dokładną metodą (1- tworzenie nowej funkcji z ciągiem, 2 ewalna funkcja) jest lepiej? – DuduAlul